页面对象
福昕 PDF SDK 安卓版通过 Core SDK 提供了两个层级的页面内容操作 API:
- PDFPage 快捷接口 — 通过
PDFPage的快捷方法向页面添加文本或图片,适合常见场景。 - 图形对象 API — 通过图形对象(Graphics Objects)直接操作页面内容流,支持创建、遍历、修改和删除文本、图片、路径等对象,适合需要精确控制的高级场景。
PDFPage 快捷接口:插入文本与图片
PDFPage 提供了以下快捷方法,无需手动管理图形对象和内容流:
插入图片
从文件路径插入:
java
PDFPage.addImageFromFilePath(String file_path, PointF position,
float width, float height, boolean auto_generate_content)
从 Image 对象插入(支持多帧图片):
java
PDFPage.addImage(Image image, int frame_index, PointF position,
float width, float height, boolean auto_generate_content)
备注
调用 addImage / addImageFromFilePath 前,需先获取并解析目标页面。
示例:
java
PDFDoc doc = new PDFDoc(filePath);
doc.load(null);
PDFPage page = doc.getPage(0);
if (!page.isParsed()) {
Progressive parse = page.startParse(PDFPage.e_ParsePageNormal, null, false);
int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
state = parse.resume();
}
}
page.addImageFromFilePath("/sdcard/FoxitSDK/logo.png",
new PointF(20, 30), 60, 50, true);
doc.saveAs(outputPath, PDFDoc.e_SaveFlagNormal);
插入文本
java
PDFPage.addText(String text, RectF rect, RichTextStyle style)
PDFPage.addText(String text, RectF rect, RichTextStyle style, int rotation)
其中 RichTextStyle 用于设置字体、字号、颜色、粗体、斜体、下划线等文本样式。
示例:
java
RichTextStyle style = new RichTextStyle();
style.setFont(new Font(Font.e_StdIDHelvetica));
style.setText_size(16.0f);
style.setText_color(0xFF000000);
style.setIs_bold(true);
style.setText_alignment(CommonDefines.e_AlignmentLeft);
page.addText("Hello, Foxit PDF SDK!", new RectF(50, 750, 400, 700), style);
doc.saveAs(outputPath, PDFDoc.e_SaveFlagNormal);
图形对象 API:精确操作页面内容
以下内容介绍直接操作页面内容流中图形对象的 API,适用于需要精确控制对象属性、位置和层叠顺序的场景。
核心类
| 类 | 包路径 | 说明 |
|---|---|---|
GraphicsObjects | com.foxit.sdk.pdf | 页面图形对象集合(PDFPage 的父类),管理对象的插入、删除和遍历 |
GraphicsObject | com.foxit.sdk.pdf.graphics | 图形对象基类,提供类型、颜色、矩阵变换、透明度等通用属性 |
TextObject | com.foxit.sdk.pdf.graphics | 文本对象 — 创建和编辑页面中的文本 |
ImageObject | com.foxit.sdk.pdf.graphics | 图片对象 — 创建和编辑页面中的图片 |
PathObject | com.foxit.sdk.pdf.graphics | 路径对象 — 创建和编辑页面中的矢量图形 |
FormXObject | com.foxit.sdk.pdf.graphics | Form XObject — 可复用的页面内容片段 |
ShadingObject | com.foxit.sdk.pdf.graphics | 着色对象 |
图形对象类型
| 常量 | 值 | 说明 |
|---|---|---|
GraphicsObject.e_TypeAll | 0 | 所有类型 |
GraphicsObject.e_TypeText | 1 | 文本对象 |
GraphicsObject.e_TypePath | 2 | 路径对象 |
GraphicsObject.e_TypeImage | 3 | 图片对象 |
GraphicsObject.e_TypeShading | 4 | 着色对象 |
GraphicsObject.e_TypeFormXObject | 5 | Form XObject |
遍历页面图形对象
PDFPage 继承自 GraphicsObjects,可直接遍历页面中的图形对象:
java
PDFPage page = doc.getPage(0);
if (!page.isParsed()) {
Progressive parse = page.startParse(PDFPage.e_ParsePageNormal, null, false);
int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
state = parse.resume();
}
}
long pos = page.getFirstGraphicsObjectPosition(GraphicsObject.e_TypeAll);
while (pos != 0) {
GraphicsObject obj = page.getGraphicsObject(pos);
int type = obj.getType();
switch (type) {
case GraphicsObject.e_TypeText:
TextObject textObj = obj.getTextObject();
String text = textObj.getText();
break;
case GraphicsObject.e_TypeImage:
ImageObject imgObj = obj.getImageObject();
break;
case GraphicsObject.e_TypePath:
PathObject pathObj = obj.getPathObject();
break;
}
pos = page.getNextGraphicsObjectPosition(pos, GraphicsObject.e_TypeAll);
}
创建文本对象
java
TextObject textObj = TextObject.create();
textObj.setText("Hello, Foxit SDK!");
TextState textState = new TextState();
textState.font_size = 24.0f;
textState.font = new Font(Font.e_StdIDHelvetica);
textState.textmode = TextState.e_ModeFill;
textObj.setTextState(page, textState, false, 400);
textObj.setFillColor(0xFF000000);
// 设置位置(通过变换矩阵)
Matrix2D matrix = new Matrix2D(1, 0, 0, 1, 100, 700);
textObj.setMatrix(matrix);
// 插入到页面末尾
long lastPos = page.getLastGraphicsObjectPosition(GraphicsObject.e_TypeAll);
page.insertGraphicsObject(lastPos, textObj);
// 生成内容流(必须调用,否则修改不会生效)
page.generateContent();
注意
对页面图形对象进行插入、删除或修改后,必须调用 page.generateContent() 来将更改写入页面内容流。
创建图片对象
java
ImageObject imgObj = ImageObject.create(doc);
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
imgObj.setBitmap(bitmap, null);
Matrix2D matrix = new Matrix2D(200, 0, 0, 150, 100, 500);
imgObj.setMatrix(matrix);
long lastPos = page.getLastGraphicsObjectPosition(GraphicsObject.e_TypeAll);
page.insertGraphicsObject(lastPos, imgObj);
page.generateContent();
创建路径对象
java
PathObject pathObj = PathObject.create();
Path pathData = new Path();
pathData.moveTo(new PointF(100, 700));
pathData.lineTo(new PointF(300, 700));
pathData.lineTo(new PointF(300, 500));
pathData.closeFigure();
pathObj.setPathData(pathData);
pathObj.setFillMode(Path.e_FillModeAlternate);
pathObj.setStrokeState(true);
pathObj.setStrokeColor(0xFF0000FF);
pathObj.setFillColor(0x80FFFF00);
long lastPos = page.getLastGraphicsObjectPosition(GraphicsObject.e_TypeAll);
page.insertGraphicsObject(lastPos, pathObj);
page.generateContent();
创建 Form XObject
FormXObject 是可复用的内容容器,可以将一个页面的内容导入为 XObject:
java
FormXObject formXObj = FormXObject.create(doc);
// 从源页面导入内容(包含或排除注释)
formXObj.importPageContent(sourcePage, false);
// 获取 FormXObject 内部的图形对象集合
GraphicsObjects innerObjects = formXObj.getGraphicsObjects();
删除图形对象
java
page.removeGraphicsObject(graphicsObject);
// 或按位置删除
page.removeGraphicsObjectByPosition(position);
page.generateContent();
移动图形对象顺序
java
// 将对象从当前位置移动到指定位置之后
page.moveGraphicsObjectByPosition(currentPos, targetPos);
page.generateContent();
API 参考
GraphicsObject、TextObject、ImageObject、PathObject、FormXObject 的完整接口说明请参阅 API 手册。