Skip to content

注释概述

福昕 PDF SDK iOS 版支持 PDF 规范中定义的大多数注释(Annotation)类型,通过 Core SDK 提供注释的创建、属性访问与修改、外观生成与绘制等能力。

UI Extensions 内置注释功能

如果您使用的是完整阅读器(UI Extensions),常用注释(高亮、便笺、绘图、图章等)的创建与编辑已通过工具栏内置,用户可直接在 UI 中操作,无需额外编码。本文档主要面向需要通过代码操控注释的场景。

注释类型

下表列出了 PDF 规范定义的注释类型、是否属于 Markup 注释以及 SDK 的支持情况。

注释类型类型常量描述MarkupSDK 支持
Text (Note)FSAnnotNote便笺/文本批注支持
LinkFSAnnotLink链接跳转注释支持
FreeTextFSAnnotFreeText自由文本(打字机/文本框/标注框)支持
LineFSAnnotLine直线/箭头等线条标注支持
SquareFSAnnotSquare矩形框标注支持
CircleFSAnnotCircle圆形/椭圆标注支持
PolygonFSAnnotPolygon多边形标注支持
PolyLineFSAnnotPolyLine折线标注支持
HighlightFSAnnotHighlight文本高亮标注支持
UnderlineFSAnnotUnderline文本下划线标注支持
SquigglyFSAnnotSquiggly波浪下划线标注支持
StrikeOutFSAnnotStrikeOut删除线标注支持
StampFSAnnotStamp图章/印章标注支持
CaretFSAnnotCaret插入符号标注支持
InkFSAnnotInk手绘墨迹/自由笔迹支持
PopupFSAnnotPopup弹出窗口(显示/编辑注释内容)支持
FileAttachmentFSAnnotFileAttachment文件附件注释支持
SoundFSAnnotSound声音注释不支持
MovieFSAnnotMovie影片注释不支持
WidgetFSAnnotWidget表单字段控件注释支持
ScreenFSAnnotScreen屏幕/媒体播放注释支持
PrinterMarkFSAnnotPrinterMark印刷标记注释不支持
TrapNetFSAnnotTrapNet陷印网注释不支持
WatermarkFSAnnotWatermark水印注释不支持
3DFSAnnot3D3D 注释不支持
RedactFSAnnotRedact密文脱敏注释支持

备注

SDK 额外支持一种自定义注释类型 PSI(Pressure Sensitive Ink,压感笔迹),对应常量 FSAnnotPSInk。该类型在 PDF 规范中未定义,通常用于手写场景。

SDK 不支持 PDF 规范中的 Watermark(水印注释)类型,但支持以页面内容形式添加的水印,详见水印

基础类层次

SDK 注释类采用继承结构,不同类型的注释从公共基类派生:

FSAnnot                   ← 所有注释的基类
├── FSMarkup              ← 支持标记特性的注释基类(标题、主题、透明度、回复、分组等)
│   ├── FSTextMarkup      ← 文本标记注释基类(Highlight / Underline / StrikeOut / Squiggly)
│   ├── FSFreeText        ← 自由文本注释
│   ├── FSNote            ← 便笺注释
│   ├── FSLine            ← 直线注释
│   ├── FSSquare          ← 矩形注释
│   ├── FSCircle          ← 圆形注释
│   ├── FSInk             ← 墨迹注释
│   ├── FSStamp           ← 图章注释
│   ├── FSCaret           ← 插入符注释
│   ├── FSFileAttachment  ← 文件附件注释
│   └── FSRedact          ← 密文脱敏注释
├── FSLink                ← 链接注释
├── FSScreen              ← 屏幕注释
├── FSWidget              ← 表单控件注释
└── FSPopup               ← 弹出窗口注释

FSAnnot 基类 — 通用属性

所有注释共享以下 FSAnnot 基类方法:

方法说明
getType获取注释类型(返回 FSAnnotType 常量)
getPage获取注释所在页面
getRect / setRect:获取/设置注释矩形区域
move:移动注释到新位置
getContent / setContent:获取/设置注释文本内容
getBorderColor / setBorderColor:获取/设置边框颜色
getBorderInfo / setBorderInfo:获取/设置边框信息(宽度、样式、虚线模式)
getFlags / setFlags:获取/设置注释标志位(如不可见、锁定等)
getUniqueID / setUniqueID:获取/设置注释唯一标识
getModifiedDateTime / setModifiedDateTime:获取/设置修改时间
resetAppearanceStream重新生成注释外观流(属性修改后需调用)
isEmpty检查注释对象是否为空

注意

修改注释属性后,必须调用 resetAppearanceStream 才能使外观更新生效。

FSMarkup 基类 — 标记注释扩展属性

Markup 注释在 FSAnnot 基础上提供以下扩展能力:

方法说明
getTitle / setTitle:获取/设置作者/标题
getSubject / setSubject:获取/设置主题
getOpacity / setOpacity:获取/设置透明度(0.0 ~ 1.0)
getIntent / setIntent:获取/设置意图(如 FreeText 的打字机/标注框子类型)
getCreationDateTime / setCreationDateTime:获取/设置创建时间
getPopup / setPopup:获取/设置关联的弹出窗口
getReplyCount获取回复数量
getReply: / addReply / removeReply:获取/添加/删除回复(回复为 FSNote 类型)
removeAllReplies删除所有回复
isGrouped判断注释是否在分组中
getGroupHeader / getGroupElements / ungroup获取分组头/分组成员/取消分组
getStateAnnots: / addStateAnnot:stateModel:state:获取/添加状态注释(审阅、标记状态)

创建注释

通过 [FSPDFPage addAnnot:rect:] 方法在页面上创建注释:

objc
#import <FoxitRDK/FSPDFObjC.h>

FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];
FSPDFPage *page = [doc getPage:0];

// 指定类型常量和矩形区域创建注释
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:100 right1:130 top1:130];
FSAnnot *annot = [page addAnnot:FSAnnotNote rect:rect];
FSNote *note = [[FSNote alloc] initWithAnnot:annot];

// 设置属性
[note setIconName:@"Comment"];
[note setBorderColor:0xFF0000FF];
[note setContent:@"这是一条便笺注释。"];

// 生成外观(必须调用)
[note resetAppearanceStream];

[doc saveAs:@"path/to/output.pdf" saveFlags:FSPDFDocSaveFlagNormal];

删除注释

通过 [FSPDFPage removeAnnot:] 方法删除页面上的注释:

objc
FSAnnot *annot = [page getAnnot:0];
if (annot && ![annot isEmpty]) {
    [page removeAnnot:annot];
}

注释事件监听

通过 UIExtensionsManager 注册 IAnnotEventListener,可以监听注释的添加、修改、删除等事件:

objc
[extensionsManager registerAnnotEventListener:self];

// IAnnotEventListener
- (void)onAnnotAdded:(FSPDFPage *)page annot:(FSAnnot *)annot {
    NSLog(@"注释已添加: %@", [annot getContent]);
}

- (void)onAnnotDeleted:(FSPDFPage *)page annot:(FSAnnot *)annot {
    NSLog(@"注释已删除");
}

- (void)onAnnotModified:(FSPDFPage *)page annot:(FSAnnot *)annot {
    NSLog(@"注释已修改");
}

备注

取消注册使用 unregisterAnnotEventListener: 方法。建议在 ViewController 生命周期结束时取消注册,避免内存泄漏。

更多注释类型

各注释类型的详细用法请参阅:

API 参考

FSAnnotFSMarkupFSNoteFSLineFSTextMarkup 等注释类的完整接口说明请参阅 API 手册