文本标记注释
文本标记注释(Text Markup)用于对 PDF 文档中的现有文本进行视觉标记。福昕 PDF SDK 安卓版通过 TextMarkup 基类及其子类型提供高亮、下划线、删除线、波浪线四种标记方式。
| 类型 | 类型常量 | 说明 |
|---|---|---|
| 高亮 | Annot.e_Highlight | 以半透明色块覆盖文本 |
| 下划线 | Annot.e_Underline | 在文本下方添加下划线 |
| 删除线 | Annot.e_StrikeOut | 在文本中间添加删除线 |
| 波浪线 | Annot.e_Squiggly | 在文本下方添加波浪线 |
核心概念:QuadPoints
文本标记注释的定位依赖 QuadPoints(四点组),每个 QuadPoints 由四个点定义一个覆盖区域(通常对应一行文本的矩形),多个 QuadPoints 组成 QuadPointsArray 以覆盖多行或跨区域文本。
first ──────── second
│ │
third ──────── fourth
四个点的对应关系:
first— 左上角second— 右上角third— 左下角fourth— 右下角
创建文本标记注释时,可以将初始矩形设为空(0, 0, 0, 0),注释矩形会根据设置的 QuadPoints 自动计算。
示例:基于文本搜索结果创建高亮注释
以下示例演示先搜索页面中的目标文本,然后根据搜索结果的位置创建高亮注释。
java
import com.foxit.sdk.common.fxcrt.PointF;
import com.foxit.sdk.common.fxcrt.RectF;
import com.foxit.sdk.common.fxcrt.RectFArray;
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.TextPage;
import com.foxit.sdk.pdf.TextSearch;
import com.foxit.sdk.pdf.annots.Annot;
import com.foxit.sdk.pdf.annots.QuadPoints;
import com.foxit.sdk.pdf.annots.QuadPointsArray;
import com.foxit.sdk.pdf.annots.TextMarkup;
PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);
PDFPage page = doc.getPage(0);
// 创建文本搜索对象
TextSearch textSearch = new TextSearch(doc, null, TextPage.e_ParseTextNormal);
textSearch.setPattern("foxit");
if (textSearch.findNext()) {
// 获取匹配文本的矩形区域
RectFArray rects = textSearch.getMatchRects();
// 将每个矩形转换为 QuadPoints
QuadPointsArray quadPointsArray = new QuadPointsArray();
for (int i = 0; i < rects.getSize(); i++) {
RectF rect = rects.getAt(i);
QuadPoints qp = new QuadPoints();
qp.setFirst(new PointF(rect.getLeft(), rect.getTop()));
qp.setSecond(new PointF(rect.getRight(), rect.getTop()));
qp.setThird(new PointF(rect.getLeft(), rect.getBottom()));
qp.setFourth(new PointF(rect.getRight(), rect.getBottom()));
quadPointsArray.add(qp);
}
// 创建高亮注释(初始矩形为空,将根据 QuadPoints 自动计算)
RectF emptyRect = new RectF(0, 0, 0, 0);
TextMarkup highlight = new TextMarkup(
page.addAnnot(Annot.e_Highlight, emptyRect));
highlight.setQuadPoints(quadPointsArray);
highlight.setBorderColor(0xffff0000); // 红色
highlight.setOpacity(0.3f); // 30% 透明度
highlight.resetAppearanceStream();
}
doc.saveAs("path/to/output.pdf", PDFDoc.e_SaveFlagNormal);
示例:创建下划线注释
如果已知文本在页面上的坐标区域,可直接构造 QuadPoints 创建下划线注释:
java
import com.foxit.sdk.common.fxcrt.PointF;
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.QuadPoints;
import com.foxit.sdk.pdf.annots.QuadPointsArray;
import com.foxit.sdk.pdf.annots.TextMarkup;
PDFPage page = doc.getPage(0);
QuadPoints qp = new QuadPoints();
qp.setFirst(new PointF(72, 750));
qp.setSecond(new PointF(300, 750));
qp.setThird(new PointF(72, 730));
qp.setFourth(new PointF(300, 730));
QuadPointsArray quadPointsArray = new QuadPointsArray();
quadPointsArray.add(qp);
TextMarkup underline = new TextMarkup(
page.addAnnot(Annot.e_Underline, new RectF(0, 0, 0, 0)));
underline.setQuadPoints(quadPointsArray);
underline.setBorderColor(0xff00aa00); // 绿色
underline.resetAppearanceStream();
提示
将类型常量替换为 Annot.e_StrikeOut 或 Annot.e_Squiggly 即可创建删除线或波浪线注释,其余代码完全一致。
常用属性
| 方法 | 说明 |
|---|---|
getQuadPoints() / setQuadPoints(QuadPointsArray) | 获取/设置四点组数组 |
setBorderColor(int) | 设置标记颜色 |
setOpacity(float) | 设置透明度(0.0 ~ 1.0) |
setContent(String) | 设置注释的文本内容(注释面板中显示的批注文字) |
setTitle(String) | 设置作者/标题 |
resetAppearanceStream() | 生成/更新外观 |