Skip to content

便笺与自由文本

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

便笺注释(Note)

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

核心方法

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

状态常量

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

标记模型Markup.e_StateModelMarked

常量说明
Markup.e_StateMarked已标记
Markup.e_StateUnmarked未标记

审阅模型Markup.e_StateModelReview

常量说明
Markup.e_StateAccepted已接受
Markup.e_StateRejected已拒绝
Markup.e_StateCancelled已取消
Markup.e_StateCompleted已完成
Markup.e_StateDeferred已推迟
Markup.e_StateFuture将来处理
Markup.e_StateNone无状态

示例:创建便笺注释

java
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.annots.Annot;
import com.foxit.sdk.pdf.annots.Note;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(100, 100, 124, 124);
Note note = new Note(page.addAnnot(Annot.e_Note, rect));

note.setIconName("Comment");
note.setBorderColor(0xff0000ff);
note.setContent("审核意见:此段表述需要修改。");
note.setTitle("审阅者");
note.setOpenStatus(false);

note.resetAppearanceStream();

示例:为注释添加回复

java
import com.foxit.sdk.pdf.annots.Markup;
import com.foxit.sdk.pdf.annots.Note;

// 获取页面上的一个 Markup 注释
Markup markup = new Markup(page.getAnnot(0));

// 添加回复(返回 Note 类型)
Note reply = markup.addReply();
reply.setContent("已修改,请重新审阅。");
reply.setTitle("作者");
reply.resetAppearanceStream();

// 查看回复数量
int replyCount = markup.getReplyCount();

自由文本注释(FreeText)

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

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

核心方法

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

示例:创建打字机注释

java
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.annots.Annot;
import com.foxit.sdk.pdf.annots.DefaultAppearance;
import com.foxit.sdk.pdf.annots.FreeText;
import com.foxit.sdk.pdf.annots.Markup;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(100, 500, 350, 540);
FreeText freeText = new FreeText(page.addAnnot(Annot.e_FreeText, rect));

// 设置为打字机子类型
freeText.setIntent("FreeTextTypewriter");

// 设置文本内容和外观
freeText.setContent("这是通过打字机注释添加的文本。");

DefaultAppearance da = new DefaultAppearance();
da.setText_size(14);
da.setText_color(0xff000000);
freeText.setDefaultAppearance(da);

freeText.setAlignment(0);  // 左对齐
freeText.setOpacity(1.0f);
freeText.resetAppearanceStream();

示例:创建标注框注释

java
import com.foxit.sdk.common.fxcrt.PointF;
import com.foxit.sdk.common.fxcrt.PointFArray;
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.annots.Annot;
import com.foxit.sdk.pdf.annots.FreeText;
import com.foxit.sdk.pdf.annots.Markup;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(200, 400, 400, 450);
FreeText callout = new FreeText(page.addAnnot(Annot.e_FreeText, rect));

callout.setIntent("FreeTextCallout");
callout.setContent("请注意此处的格式问题。");

// 设置引线端点(从文本框指向目标位置)
PointFArray points = new PointFArray();
points.add(new PointF(100, 350));  // 目标点(箭头指向的位置)
points.add(new PointF(150, 400));  // 拐点
points.add(new PointF(200, 420));  // 文本框连接点
callout.setCalloutLinePoints(points);

// 设置引线箭头样式
callout.setCalloutLineEndingStyle(Markup.e_EndingStyleOpenArrow);

callout.resetAppearanceStream();

插入符注释(Caret)

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

java
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.annots.Annot;

PDFPage page = doc.getPage(0);

RectF rect = new RectF(150, 700, 160, 720);
Annot caret = page.addAnnot(Annot.e_Caret, rect);

caret.setContent("在此处插入新段落。");
caret.setBorderColor(0xff0000ff);
caret.resetAppearanceStream();