# @embedpdf/core-annotation 中文文档

规范地址：https://npmcn.com/package/%40embedpdf/core-annotation/

版本：3\.2\.0
npm 元数据更新时间：2026-11-11T23:24:16.050Z
中文译文更新时间：2026-11-13T14:42:05.948Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40embedpdf/core-annotation
原文对照：https://npmcn.com/package/%40embedpdf/core-annotation/?lang=original
项目主页：https://github.com/embedpdf/embed-pdf-viewer#readme
源码仓库：https://github.com/embedpdf/embed-pdf-viewer

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：2.3 MB，9 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：4 个
- 首次发布：2026-08-05T21:41:19.058Z
- 最新版本发布：2026-11-11T23:24:15.869Z
- 近 30 天下载量：66898（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：27（近 12 个月 27 个）

## 中文简介

纯注脑: 型号为 ^ 更新 (msg) → \[型号,效果\] → 视图. 内容 - 空间 几何每个家族, 点击测试,和工具。 没有DOM,引擎,或框架依赖性.

## 安装

```sh
npm install @embedpdf/core-annotation
```

也可以使用：`pnpm add @embedpdf/core-annotation`、`yarn add @embedpdf/core-annotation`、`bun add @embedpdf/core-annotation`

## README

# @embedpdf/核心注释

纯粹的注释核心:手势、几何、命中测试和场景 纯函数。 没有DOM,没有引擎,没有框架,没有时钟. 注释 插件 (e)[`@embedpdf/plugin-annotation`](https://npmcn.com/package/plugin/annotation/README.md)(中文(简体) ) 运行它与发动机.

## 合同

```ts
update(model: Model, message: Message): UpdateResult;

interface UpdateResult {
  session: Session; // selection, hover, the gesture in progress, tool settings
  change: ChangeSet; // { put: records the message changed or created, drop: ids it deleted }
  effects: Effect[]; // the engine work to do: create, patch, flags, text, delete, …
}

type Model = Session & AnnotationView; // AnnotationView = { byId, order }
```

一个信息与它运行的模式一致;下一会,记录它 改变和工作 做出来。 核心从不存储记录: 记录 `model.byId` 是插件所显示的( 引擎的记录用 这段会议正等待上演 消息改变了他们。 插件将效果转换为一个更改 引擎,它显示 直到引擎回答.

后果值得了解:

-   更改不返回记录的信件 `EMPTY_CHANGE`指针移动 在拖动时仅更改会话(手势) `draft`因此费用 一个比较.
-   核心创建的记录需要会话所持有的第一个对象编号 (单位:千美元)`Session.objectNumbers`校对:soup 框并标出 `unconfirmed` 直到引擎写下来 插件 手动消息运行前可能需要的编号 (单位:千美元)`newRecordsAtMost`; 核心拒绝制作无法命名的记录. A 类 替换文本切出 回答它的护身符的号码, 所以两者都是 写成一个变化。 当记录离开视图时,插件会发送 `forget`。 。 。 .
-   改变后如何记录是一条规则 `src/appearance.ts`, (中文(简体) ), 对于手势,侧边栏编辑和代码编辑相同:一个动作会保留光栅 并移动它,任何其他可见的变化 绘制活,邮票和形式 部件总是显示它们的光栅(邮票按自己的比例,如 发动机适合它 `contain`) (中文(简体) ). 它问引擎自己的判断 (单位:千美元)`appearanceChangeOf`),因此,视图保持了一种外观,确切位置是: 引擎确实如此。 发动机的再生光栅是否改变 是发动机的 回答,从来没有核心.

## 处理每条消息的地方

`src/update/` 每个工作都有一个单元. `update/index.ts` 这是 条目和消息开关.

| 模块 | 信件 |
| --- | --- |
| `edit.ts` | `editPointer` 下并移动: 选择、 移动、 调整大小、 旋转、 标题、 领导者 |
| `edit-commit.ts` | `editPointer` 上: 手势的结果变为记录的几何 |
| `marquee.ts` | `marqueePointer`: 橡胶带选择 |
| `draw.ts` | `createPointer`, (中文(简体) ), `finishInkDraft`, (中文(简体) ), `finishCreationDraft` |
| `draw-callout.ts` | 免费文本点名手势 |
| `draw-distance.ts` | 距离测量手势 |
| `text-markup.ts` | `createMarkup`, (中文(简体) ), `createCaret`, (中文(简体) ), `createReplaceText`标记预览 |
| `selection-edits.ts` | `setFields`, (中文(简体) ), `setFlags`, (中文(简体) ), `rotateSelection`, (中文(简体) ), `resetRotation`, (中文(简体) ), `delete` |
| `text.ts` | `setText`, (中文(简体) ), `setRichText` |
| `session.ts` | 初始会话,工具默认值, `forget` |
| `changes.ts` | 每一个改变记录的过渡股份 |
| `page-bound.ts` | 在他们开始的页面中保持手势 |

原文为:`view.ts`, (中文(简体) ), `hit.ts`, (中文(简体) ), `scene.ts`, (中文(简体) ), `geometry.ts`,)采取同样的 `Model` 永远不要改变它.

## 创造的手势会怎样

一个创建工具回答了一个问题:如果手势现在结束,那会是什么 存在吗? `placement.ts` 答案为: `gesturePlacement` 给拖放的盒子 一旦手势被拖动, 则会单击默认 (单位:千美元)`resolveClickPlacement`:它的大小,以及哪个部分在点击上着陆. 每个 形状家庭回答什么(`ShapeFamily.placed`,通过 `placedShape`(单位:千美元) 框,一个圆形,一个文本框,一个与工具结尾相接的行,一个圆形收音机 按钮。 犯罪(`draw.ts`),绘制中`view.ts`)和 工具的幽灵( 插件的) `tools/ghost.ts`发出同样的呼吁 `unmadeItem` 画一个尚未制作的注释,因为所制作的注释将作画.

## 测试

`test/support.ts` 以插件的方式驱动核心 : `modelWith(records)` 建立一个模型,以及 `step(model, message)` 应用消息的结果(其 和记录中的更改).

## 常见问题

### @embedpdf/core-annotation 是什么？

纯注脑: 型号为 ^ 更新 \(msg\) → \[型号,效果\] → 视图\. 内容 - 空间 几何每个家族, 点击测试,和工具。 没有DOM,引擎,或框架依赖性\.

### 如何安装 @embedpdf/core-annotation？

在项目目录运行 npm install @embedpdf/core-annotation，或使用 pnpm add / yarn add / bun add。

### @embedpdf/core-annotation 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @embedpdf/core-annotation 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @embedpdf/core-annotation 可以商用吗？

@embedpdf/core-annotation 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @embedpdf/core-annotation 的下载量有多少？

根据 npm 官方下载统计，@embedpdf/core-annotation 在 2026/10/14 – 2026/11/12 这 30 天内被下载 66,898 次，日均约 2,230 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @embedpdf/core-annotation 还在维护吗？

最新版本 3\.2\.0 发布于 2026/11/12（1 天前）；至今共发布 27 个版本，其中过去 12 个月发布了 27 个；首次发布于 2026/08/06。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

