便笺与自由文本
本文档介绍便笺(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];