导入与导出
福昕 PDF SDK 安卓版支持通过 FDF 和 XFDF 格式导入和导出注释数据,方便在不同文档或系统间交换注释。此外,SDK 还提供注释扁平化功能,可将注释内容永久合并到页面中。
FDF 与 XFDF 格式
| 格式 | 常量 | 说明 |
|---|---|---|
| FDF | FDFDoc.e_FDF | Forms Data Format,PDF 规范定义的二进制格式 |
| XFDF | FDFDoc.e_XFDF | XML 版本的 FDF,基于 XML 文本格式,便于解析和集成 |
FDFDoc 是操作 FDF/XFDF 文件的核心类:
| 方法 | 说明 |
|---|---|
FDFDoc(int type) | 创建空 FDF 文档(FDFDoc.e_FDF 或 FDFDoc.e_XFDF) |
FDFDoc(String path) | 从文件路径加载 FDF 文档 |
getType() | 获取格式类型 |
isEmpty() | 判断是否为空 |
saveAs(String filePath) | 保存到文件 |
导出注释
导出全部注释
使用 PDFDoc.exportToFDF() 将文档中的注释导出到 FDF/XFDF 文件:
java
import com.foxit.sdk.fdf.FDFDoc;
import com.foxit.sdk.pdf.PDFDoc;
PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);
// 导出为 XFDF 格式
FDFDoc fdfDoc = new FDFDoc(FDFDoc.e_XFDF);
doc.exportToFDF(fdfDoc, PDFDoc.e_Annots, null);
fdfDoc.saveAs("path/to/annotations.xfdf");
备注
exportToFDF() 的第二个参数为导出类型,PDFDoc.e_Annots 表示导出注释。第三个参数为页面范围(Range 对象),传 null 表示导出所有页面。
导出单个注释
使用 PDFDoc.exportAnnotToFDF() 导出指定注释:
java
import com.foxit.sdk.fdf.FDFDoc;
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.annots.Annot;
PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);
PDFPage page = doc.getPage(0);
// 获取页面上的第一个注释
Annot annot = page.getAnnot(0);
// 导出为 FDF 格式
FDFDoc fdfDoc = new FDFDoc(FDFDoc.e_FDF);
doc.exportAnnotToFDF(annot, fdfDoc);
fdfDoc.saveAs("path/to/single_annot.fdf");
导入注释
使用 PDFDoc.importFromFDF() 从 FDF/XFDF 文件导入注释到文档中:
java
import com.foxit.sdk.fdf.FDFDoc;
import com.foxit.sdk.pdf.PDFDoc;
PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);
// 从 XFDF 文件加载注释数据
FDFDoc fdfDoc = new FDFDoc("path/to/annotations.xfdf");
// 导入注释到文档
doc.importFromFDF(fdfDoc, PDFDoc.e_Annots, null);
doc.saveAs("path/to/output.pdf", PDFDoc.e_SaveFlagNormal);
注释扁平化
扁平化(Flatten)将注释的视觉外观合并到页面内容中,注释本身被移除,内容变为页面的一部分(不可再编辑或选中)。
扁平化整个页面的注释
java
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.PDFPage;
PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);
PDFPage page = doc.getPage(0);
// 扁平化页面上的所有注释
page.flattenAnnots(true);
doc.saveAs("path/to/flattened.pdf", PDFDoc.e_SaveFlagNormal);
备注
flattenAnnots(boolean) 参数为 true 时扁平化所有注释,为 false 时仅扁平化表单字段。
扁平化单个注释
java
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.annots.Annot;
PDFPage page = doc.getPage(0);
Annot annot = page.getAnnot(0);
if (annot != null && !annot.isEmpty()) {
page.flattenAnnot(annot);
}
典型应用场景
| 场景 | 推荐方案 |
|---|---|
| 团队协作审阅 — 在成员间传递注释 | 导出为 XFDF 后分发,各成员导入到本地文档 |
| 服务端集中处理注释 | 使用 XFDF(XML 格式)便于解析和数据库存储 |
| 生成最终发布文档 — 注释不可编辑 | 先导出注释备份,再扁平化所有注释 |
| 归档保存 — 确保一致呈现 | 扁平化所有注释和表单字段 |