Annotations
批注
本页介绍 PDF 批注的创建、读取、搜索和扁平化。Page 为每种批注子类型公开一个 Add*() 方法,返回一个实时的 Annotation 句柄;Annotation 基类及其子类型(TextAnnotation、StampAnnotation、MarkupAnnotation 等)公开批注的属性,以便读取和编辑。
创建标记、注释和链接批注
四个文本标记方法 — Page.AddHighlight()、Page.AddUnderline()、Page.AddSquiggly() 和 Page.AddStrikeOut() — 接受一个 quads 数组(/QuadPoints),并返回一个 MarkupAnnotation。Page.AddLink() 创建一个带有 URI 或内部操作的可点击区域,Page.AddTextNote() 添加一个粘贴便签图标,打开一个显示 contents 文本的弹出框,返回一个 TextAnnotation。
page.AddHighlight({ quads, color: [1, 1, 0], contents: 'Yellow highlight' });
page.AddUnderline({ quads, color: [0, 0, 1] });
page.AddStrikeOut({ quads, color: [1, 0, 0] });
page.AddLink({
rect: [100, 700, 220, 716],
action: { type: 'uri', uri: 'https://example.com' },
border: 0,
});
page.AddTextNote({
rect: [x, y, x + 20, y + 20], icon: 'Note', author: 'Reviewer',
contents: 'This is a sticky-note annotation.',
});Page 还公开形状和自由手绘方法 — AddSquare()、AddCircle()、AddLine()、AddPolygon()、AddPolyline()、AddInk()、AddFreeText()、AddCaret() 和 AddStamp() — 每个方法返回对应子类型的批注句柄,并自动生成其 /AP 外观。
读取和列出批注
page.Annotations 是页面上每个 Annotation 的数组。每个批注,无论子类型如何,都公开 Subtype、Rect、Color、Contents、Name、Layer、ModDate、Flags、Print、Hidden 和 Opacity;子类型会添加自己的字段,例如 StampAnnotation.StampName 或 MarkupAnnotation.QuadPoints。
const freeText = page.Annotations.find((a) => a.Subtype === 'FreeText');
if (freeText) {
freeText.Contents = 'Updated note text';
}搜索注释文本
Page.SearchAnnotationText() and Page.SearchAnnotations() 是故意分开的。 SearchAnnotationText() 在文本中查找匹配的注释 carries 而不是绘制 — 笔记的 /Contents,其作者 (/T),或其主题 (/Subj) — 并返回 AnnotationTextMatch[] ({ annot, key, value, text }). SearchAnnotations() 在文本中查找匹配的注释 draws,例如一个 FreeText的可见文字,并返回 AnnotationMatch[] ({ annot, text, quads }).
// A sticky note's /Contents text — found by SearchAnnotationText, not SearchAnnotations.
const textHits = page.SearchAnnotationText('body secret');
console.log(textHits[0].key, textHits[0].value); // 'Contents' 'body secret'
// A FreeText's rendered words — found by SearchAnnotations, not SearchAnnotationText.
const drawnHits = page.SearchAnnotations('bravo');扁平化注释
Annotation.Flatten() 将注释的 /AP 外观直接烘焙进页面的内容流,在其 /Rect 处,然后从 /Annots 中移除。结果是永久的、静态的内容——不再是观众可以点击、编辑或隐藏的独立注释。
const note = page.AddTextNote({
rect: [72, 660, 92, 680], icon: 'Comment', contents: 'Reviewed and approved.',
});
note.Flatten();技巧与最佳实践
- 在由
Add*()调用直接返回的对象上调用Flatten()——随后通过重新读取page.Annotations获得的注释是另一个对象引用。 SearchAnnotationText()和SearchAnnotations()覆盖不同的文本:如果需要查找短语,无论它是被键入到笔记中还是绘制在页面上,都应同时运行两者。- 这四种标记方法(
AddHighlight、AddUnderline、AddSquiggly、AddStrikeOut)会自动生成它们的/AP外观 —— 无需手动绘制内容流。 - 加密在往返过程中仍然有效:在
Document.Save()之前使用encrypt选项添加的注释,在文档重新打开并解密后仍然有效。
常见问题
| 问题 | 原因 | 修复 |
|---|---|---|
page.Annotations.find() 为您刚刚添加的注释返回 undefined | 在注释添加之前捕获的过时数组中搜索 | 在 Add*() 调用后重新读取 page.Annotations,或直接使用该调用返回的句柄 |
SearchAnnotationText() 未在页面上可见的文本中找到任何内容 | 文本是由注释绘制的(例如 FreeText 的正文),而不是存放在 /Contents 中 | 改用 SearchAnnotations() —— 它与绘制的文本匹配 |
在 Flatten() 之后,注释仍然显示为可编辑 | Flatten() 是在副本上调用的,而不是在 Add*() 返回的句柄上调用 | 在创建方法直接返回的对象上调用 Flatten() |
FAQ
SearchAnnotationText 和 SearchAnnotations 有什么区别?
SearchAnnotationText() 匹配文本的注释 carries — /Contents, /T (author),或 /Subj —— 如便签的正文。 SearchAnnotations() 匹配文本和注释 draws 在页面上,例如一个 FreeText的可见词。两者是互斥的:在一个中的匹配不会出现在另一个中。
如何使注释成为永久且不可交互的?
对由 Add*() 方法创建并返回的 Annotation 句柄调用 Flatten()。这会将其外观烘焙到页面的内容流中,并将其从 /Annots 中移除。
支持哪些注释子类型?
Page 提供文本标记(AddHighlight、AddUnderline、AddSquiggly、AddStrikeOut)、注释和提示(AddTextNote、AddFreeText、AddCaret)、链接(AddLink)、形状(AddSquare、AddCircle、AddLine、AddPolygon、AddPolyline)、手写墨迹(AddInk)、印章(AddStamp)以及文件附件(AddFileAttachment)。
我如何列出页面上已有的所有注释?
读取 page.Annotations,它是一个 Annotation 句柄的数组。每个句柄都公开 Subtype、Rect、Color、Contents 以及其他共享属性,这样您就可以使用标准数组方法对它们进行筛选或检查。
API Reference 摘要
| 类/方法 | 描述 |
|---|---|
Annotation | Base 处理所有注释;公开 Subtype、Rect、Color、Contents、Name、Flags、Print、Hidden、Opacity |
Annotation.Flatten() | 将注释的外观烘焙到静态页面内容中 |
TextAnnotation | 一个 /Text 便利贴句柄;添加 Icon、Open、Author |
StampAnnotation | 一个 /Stamp 橡胶印章句柄;添加 StampName |
MarkupAnnotation | 一个文本标记句柄(Highlight/Underline/StrikeOut/Squiggly);添加 MarkupType、QuadPoints |
Page.AddHighlight() / Page.AddUnderline() / Page.AddStrikeOut() / Page.AddSquiggly() | 在 /QuadPoints 上创建文本标记注释 |
Page.AddTextNote() | 创建便签注释 |
Page.AddLink() | 创建带有 URI 或内部操作的可点击链接 |
Page.Annotations | 页面上每个 Annotation,作为数组 |
Page.SearchAnnotationText() | 查找注释携带的文本(/Contents、/T、/Subj) |
Page.SearchAnnotations() | 查找注释在页面上绘制的文本 |