@embedpdf/core-annotation

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

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

中文使用文档
文档目录4 节
  1. 合同
  2. 处理每条消息的地方
  3. 创造的手势会怎样
  4. 测试

@embedpdf/核心注释

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

合同

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.tseditPointer 下并移动: 选择、 移动、 调整大小、 旋转、 标题、 领导者
edit-commit.tseditPointer 上: 手势的结果变为记录的几何
marquee.tsmarqueePointer: 橡胶带选择
draw.tscreatePointer, (中文(简体) ), finishInkDraft, (中文(简体) ), finishCreationDraft
draw-callout.ts免费文本点名手势
draw-distance.ts距离测量手势
text-markup.tscreateMarkup, (中文(简体) ), createCaret, (中文(简体) ), createReplaceText标记预览
selection-edits.tssetFields, (中文(简体) ), setFlags, (中文(简体) ), rotateSelection, (中文(简体) ), resetRotation, (中文(简体) ), delete
text.tssetText, (中文(简体) ), 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 共发布 27 个版本,首次发布于 2026/08/06;过去 12 个月发布了 27 个版本。

版本发布日期距今
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/core-annotation 的常见问题

@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 和提交记录判断。