@embedpdf/plugin-annotation

中文文档
3.2.0发布于 2026/11/12Apache-2.0TypeScriptESM + CJS近 30 天下载 180.4万

注释特性插件:纯注释-核心被线接入引擎存储器(优化创建/patch/删除)+交互中枢(环境编辑+绘图工具). 行为(形式)插入这里.

中文使用文档
文档目录5 节
  1. 三种数据,每个拥有者一个
  2. 一个变化的生命
  3. 记录如何使
  4. 东西住的地方
  5. 测试

@embedpdf/plugin - 注释

注释插件: 绘图、 选择、 移动、 重排、 输入和输入 删除注释, 在引擎拥有的文档上 。 纯洁的电线 @embedpdf/core-annotation 到发动机 和互动中心。 它没有框架代码;适配器使其 读取.

三种数据,每个拥有者一个

用户所看到的是由三种数据构建的. 每个都有一个 主人,没有别的东西写.

数据这是什么拥有者由
确认每个注释记录引擎确认, 及其外观版本记录镜像( e)sync/records.ts, (中文(简体) ), records.get()任何会话中确认的文档事件和负载
待处理此会话的更改引擎尚未回复, 每个用户动作一次内核的更改队列( n)ctx.changes(中文(简体) )用户动作第一阶段; 引擎回答后退出
第二届会议选择、 徘徊、 手势进行中、 文本编辑、 工具设置、 为新记录所持有的对象编号session 在插件状态中( e)model.ts(中文(简体) )这是核心 update

记录镜显示引擎之上的未决更改 已确认(records.view():它重新播放它们,逐个操作,通过 predictRecords,同样的规则 引擎适用。 这个 视图 (单位:千美元)read/view.ts)将这些记录变成核心记录,每张记录都是 上面写着变化 把它们和会话组成核心 Model每一个读取和手势都采用这个模型。 这是纪念品 记录,所以更改一个记录不会重算其他记录.

一个变化的生命

用户将正方形拖入新位置 :

 pointer up
    │
    ▼
 store.commit({ type: 'editPointer', phase: 'up', … })          services/store.ts
    │
    ├─ update(model, message)                                   core-annotation
    │     → session   (the drag is over)
    │     → change    (put: the square at its new place)
    │     → effects   ([{ type: 'patch', id: 'obj:12', patch: { box } }])
    │
    ├─ op builders                                              write/ops.ts
    │     patch → { type: 'annotations.update', ref, patch }
    │     (an annotation's link children follow it: write/links.ts)
    │
    └─ ctx.changes.stage({ label, ops, undo })                  the kernel
          the records mirror predicts it: the view shows the square at its
          new place at once. The queue sends it after everything staged
          before it; the engine applies it, all or nothing, and publishes
          `annotations.updated` before it answers:
            the records mirror folds it → confirmed obj:12 is at the new place
          the change leaves the view → the view shows the confirmed record

一个用户动作就是一个改变:移动五个说明就是五个改变 行动,一个请求,一个撤销步骤。 规则:

  • 拒绝 (取消赠款,在别处设置锁): 并显示确认的记录,包括任何 另一会话也随之改变。 无所不能由手取出 onWriteFailed 告诉UI为什么。 名称只有记录的更改 a 拒绝的变更本可以创造的 与它一起被拒绝.
  • 应用: 当记录镜显示 答案, 即当其事件折叠时; 如果折叠要求读取 页面,视图将它保存到读取土地.
  • 顺序: 引擎回答的顺序改变,所以 新的变化总是表现在 旧的答案.

同样的管道带来各种变化:

  • 新说明 选中对象编号 (单位:千美元)services/object-numbers.ts因此,新的记录有 其最后的参考 从其 第一个框架:可以同时选择、编辑、链接或删除,以及 每一个被创造出来的人, 替换文本护栏和 它的罢工是两个创造的 在一个变化中,罢工回应 照着它的号码 如果文档的池是空的,一会儿 创建数字等值(绘图保留在屏幕上).
  • 删除:记录及其内容(其答复,分组部分, 弹出后)立刻离开取景地,如果发动机拒绝,就回来.
  • 键入 每暂停一次, 进入一个所持更改( q)write/text-editing.ts: 每个按键都会修正,所以文本一次显示,然后发送 暂停,当编辑结束, 当其他东西被摆出, 之前 下载。 输入时输入选中单词的格式 .
  • 代码中的更改 (单位:千美元)create, (中文(简体) ), update, (中文(简体) ), delete, (中文(简体) ), reorder, (中文(简体) ), 评论,链接,脚本)通过商店的第二扇门, apply: 每个 使用引擎本身的功能检查,同时显示,并发送, 回答和拒绝 就像一个手势。 一个呼叫就是改变.

记录如何使

引擎的外观光栅所形成的确认记录(baked(中文(简体) ) 除非本届会议编辑或创建了它,在这种情况下,它从 说明vector: vector 国家优先。 又一个 会话将记录转换回光栅上(sync/confirmed.ts) (中文(简体) ). 虽然本届会议有待改变,但记录的绘制方式如下: 从变化本身(核心) drawnAfter引擎的判断: 将光栅带上,任何其它可见的活画, 和改变 光栅已经显示(一面旗帜)已照原样离开. 邮票和部件没有 活生生的渲染 总是使用光栅: 邮票的分数保持在 调整框大小( 引擎适合它) contain),并加盖了本届会议的印章 显示它被放置的预览, 直到引擎的相片存在 (单位:千美元)read/render.ts) (中文(简体) ). 光栅再次被取回 恰好当记录 外观版本更改, 当引擎报告时镜像会推进 重生的外观.

东西住的地方

文件夹里面有什么东西
controller.ts构成根: 构建服务, 连接每个区域, 组装能力
model.ts插件状态及其过渡(withSession,使偏好,.)
services/每个区域的基础是什么:商店、对象编号、事件、权威
sync/记录镜(引擎确认的内容及其预测)和随后的
read/(注释、制成物品、铬)
write/动词,以及将核心效果转化为引擎操作的操作构建器
comments/注释线程在相同记录上的镜头
tools/工具定义, 注册, 工具的幽灵, 和枢纽上的指针处理器

测试

test/harness.ts 运行内核测试上下文中的控制器 假引擎 行为像真实的: 它一次应用一个变化, 他们被派去的顺序, 全部或无, 并公布事件之前 它回答;一个创建得到它命名的对象编号. test/pending.test.ts 是起始地点:用户在更改时和更改后所看到的内容 它的方式. test/interleavings.test.ts 播放种子随机序列 更改、拒绝和远程更新,并检查视图(数值和如何) 在每一步之后.

版本与发布记录

@embedpdf/plugin-annotation 共发布 114 个版本,首次发布于 2025/06/13;过去 12 个月发布了 64 个版本。

版本发布日期距今
3.2.0latest2026/11/121 天前
3.1.02026/11/094 天前
3.0.02026/11/076 天前
3.0.0-next.23next2026/11/076 天前
3.0.0-next.222026/11/049 天前
3.0.0-next.212026/11/0310 天前

关于 @embedpdf/plugin-annotation 的常见问题

@embedpdf/plugin-annotation 是什么?

注释特性插件:纯注释-核心被线接入引擎存储器(优化创建/patch/删除)+交互中枢(环境编辑+绘图工具). 行为(形式)插入这里.

如何安装 @embedpdf/plugin-annotation?

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

@embedpdf/plugin-annotation 支持 TypeScript 吗?

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

@embedpdf/plugin-annotation 支持 ESM 还是 CommonJS?

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

@embedpdf/plugin-annotation 可以商用吗?

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

@embedpdf/plugin-annotation 的下载量有多少?

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

@embedpdf/plugin-annotation 还在维护吗?

最新版本 3.2.0 发布于 2026/11/12(1 天前);至今共发布 114 个版本,其中过去 12 个月发布了 64 个;首次发布于 2025/06/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。