Skip to content

便笺与自由文本

本文档介绍便笺(Note)、自由文本(FreeText)和插入符(Caret)三种注释类型。

便笺注释(Note)

便笺注释在页面上显示为一个小图标,点击后展开弹出窗口以查看或编辑注释内容。便笺是最常用的文本批注形式。

核心方法

方法说明
getIconName / setIconName:获取/设置图标名称(如 @"Comment"@"Key"@"Note"@"Help" 等)
getOpenStatus / setOpenStatus:获取/设置弹出窗口是否默认展开
getReplyTo获取父注释(如果当前便笺是另一个注释的回复)
isStateAnnot判断是否为状态注释
getState / setState:获取/设置状态(审阅、标记等)
getStateModel获取状态模型类型

状态常量

便笺注释支持两种状态模型:

标记模型FSMarkupStateModelMarked

常量说明
FSMarkupStateMarked已标记
FSMarkupStateUnmarked未标记

审阅模型FSMarkupStateModelReview

常量说明
FSMarkupStateAccepted已接受
FSMarkupStateRejected已拒绝
FSMarkupStateCancelled已取消
FSMarkupStateCompleted已完成
FSMarkupStateDeferred已推迟
FSMarkupStateFuture将来处理
FSMarkupStateNone无状态

示例:创建便笺注释

objc
#import <FoxitRDK/FSPDFObjC.h>

FSPDFPage *page = [doc getPage:0];

FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:100 right1:124 top1:124];
FSAnnot *annot = [page addAnnot:FSAnnotNote rect:rect];
FSNote *note = [[FSNote alloc] initWithAnnot:annot];

[note setIconName:@"Comment"];
[note setBorderColor:0xFF0000FF];
[note setContent:@"审核意见:此段表述需要修改。"];
[note setTitle:@"审阅者"];
[note setOpenStatus:NO];

[note resetAppearanceStream];

示例:为注释添加回复

objc
// 获取页面上的一个 Markup 注释
FSMarkup *markup = [[FSMarkup alloc] initWithAnnot:[page getAnnot:0]];

// 添加回复(返回 FSNote 类型)
FSNote *reply = [markup addReply];
[reply setContent:@"已修改,请重新审阅。"];
[reply setTitle:@"作者"];
[reply resetAppearanceStream];

// 查看回复数量
int replyCount = [markup getReplyCount];

自由文本注释(FreeText)

自由文本注释直接在页面上渲染文本内容(不同于便笺的图标形式)。根据 intent 属性的不同,FreeText 可表现为三种子类型:

子类型Intent 值说明
普通自由文本@""在矩形区域内渲染文本
打字机(Typewriter)@"FreeTextTypewriter"模拟打字机效果,常用于填写表单或添加批注文本
标注框(Callout)@"FreeTextCallout"带引线的标注框,用于指向页面特定位置的注释

核心方法

方法说明
getAlignment / setAlignment:获取/设置文本对齐方式(0=左对齐,1=居中,2=右对齐)
getDefaultAppearance / setDefaultAppearance:获取/设置默认外观(字体、字号、颜色)
getFillColor / setFillColor:获取/设置背景填充颜色
getInnerRect / setInnerRect:获取/设置内部文本区域
getRotation / setRotation: / rotate:获取/设置/旋转角度
getCalloutLinePoints / setCalloutLinePoints:获取/设置标注框引线端点
getCalloutLineEndingStyle / setCalloutLineEndingStyle:获取/设置标注框引线端点样式

示例:创建打字机注释

objc
#import <FoxitRDK/FSPDFObjC.h>

FSPDFPage *page = [doc getPage:0];

FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:500 right1:350 top1:540];
FSAnnot *annot = [page addAnnot:FSAnnotFreeText rect:rect];
FSFreeText *freeText = [[FSFreeText alloc] initWithAnnot:annot];

// 设置为打字机子类型
[freeText setIntent:@"FreeTextTypewriter"];

// 设置文本内容和外观
[freeText setContent:@"这是通过打字机注释添加的文本。"];

FSDefaultAppearance *da = [[FSDefaultAppearance alloc] init];
[da setText_size:14];
[da setText_color:0xFF000000];
[freeText setDefaultAppearance:da];

[freeText setAlignment:0];  // 左对齐
[freeText setOpacity:1.0f];
[freeText resetAppearanceStream];

示例:创建标注框注释

objc
#import <FoxitRDK/FSPDFObjC.h>

FSPDFPage *page = [doc getPage:0];

FSRectF *rect = [[FSRectF alloc] initWithLeft1:200 bottom1:400 right1:400 top1:450];
FSAnnot *annot = [page addAnnot:FSAnnotFreeText rect:rect];
FSFreeText *callout = [[FSFreeText alloc] initWithAnnot:annot];

[callout setIntent:@"FreeTextCallout"];
[callout setContent:@"请注意此处的格式问题。"];

// 设置引线端点(从文本框指向目标位置)
FSPointFArray *points = [[FSPointFArray alloc] init];
FSPointF *pt1 = [[FSPointF alloc] init];
[pt1 set:100 y:350];  // 目标点(箭头指向的位置)
FSPointF *pt2 = [[FSPointF alloc] init];
[pt2 set:150 y:400];  // 拐点
FSPointF *pt3 = [[FSPointF alloc] init];
[pt3 set:200 y:420];  // 文本框连接点
[points add:pt1];
[points add:pt2];
[points add:pt3];
[callout setCalloutLinePoints:points];

// 设置引线箭头样式
[callout setCalloutLineEndingStyle:FSMarkupEndingStyleOpenArrow];

[callout resetAppearanceStream];

插入符注释(Caret)

插入符注释(FSAnnotCaret)在文档中标记文本插入或替换的位置,通常显示为一个 ^ 形标记。

objc
FSPDFPage *page = [doc getPage:0];

FSRectF *rect = [[FSRectF alloc] initWithLeft1:150 bottom1:700 right1:160 top1:720];
FSAnnot *caret = [page addAnnot:FSAnnotCaret rect:rect];

[caret setContent:@"在此处插入新段落。"];
[caret setBorderColor:0xFF0000FF];
[caret resetAppearanceStream];