导入与导出
福昕 PDF SDK iOS 版支持通过 FDF 和 XFDF 格式导入和导出注释数据,方便在不同文档或系统间交换注释。此外,SDK 还提供注释扁平化功能,可将注释内容永久合并到页面中。
FDF 与 XFDF 格式
| 格式 | 常量 | 说明 |
|---|---|---|
| FDF | FSFDFDocFDF | Forms Data Format,PDF 规范定义的二进制格式 |
| XFDF | FSFDFDocXFDF | XML 版本的 FDF,基于 XML 文本格式,便于解析和集成 |
FSFDFDoc 是操作 FDF/XFDF 文件的核心类:
| 方法 | 说明 |
|---|---|
initWithType: | 创建空 FDF 文档(FSFDFDocFDF 或 FSFDFDocXFDF) |
initWithPath: | 从文件路径加载 FDF 文档 |
getType | 获取格式类型 |
isEmpty | 判断是否为空 |
saveAs: | 保存到文件 |
导出注释
导出全部注释
使用 [FSPDFDoc exportToFDFDoc:data_type:range:] 将文档中的注释导出到 FDF/XFDF 文件:
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];
// 导出为 XFDF 格式
FSFDFDoc *fdfDoc = [[FSFDFDoc alloc] initWithType:FSFDFDocXFDF];
[doc exportToFDFDoc:fdfDoc data_type:FSPDFDocAnnots range:nil];
[fdfDoc saveAs:@"path/to/annotations.xfdf"];
备注
exportToFDFDoc:data_type:range: 的第二个参数为导出类型,FSPDFDocAnnots 表示导出注释。第三个参数为页面范围(FSRange 对象),传 nil 表示导出所有页面。
导出单个注释
使用 [FSPDFDoc exportAnnotToFDFDoc:annot:] 导出指定注释:
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];
FSPDFPage *page = [doc getPage:0];
// 获取页面上的第一个注释
FSAnnot *annot = [page getAnnot:0];
// 导出为 FDF 格式
FSFDFDoc *fdfDoc = [[FSFDFDoc alloc] initWithType:FSFDFDocFDF];
[doc exportAnnotToFDFDoc:fdfDoc annot:annot];
[fdfDoc saveAs:@"path/to/single_annot.fdf"];
导入注释
使用 [FSPDFDoc importFromFDFDoc:data_type:range:] 从 FDF/XFDF 文件导入注释到文档中:
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];
// 从 XFDF 文件加载注释数据
FSFDFDoc *fdfDoc = [[FSFDFDoc alloc] initWithPath:@"path/to/annotations.xfdf"];
// 导入注释到文档
[doc importFromFDFDoc:fdfDoc data_type:FSPDFDocAnnots range:nil];
[doc saveAs:@"path/to/output.pdf" saveFlags:FSPDFDocSaveFlagNormal];
注释扁平化
扁平化(Flatten)将注释的视觉外观合并到页面内容中,注释本身被移除,内容变为页面的一部分(不可再编辑或选中)。
扁平化整个页面的注释
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];
FSPDFPage *page = [doc getPage:0];
// 扁平化页面上的所有注释
[page flattenAnnots:YES];
[doc saveAs:@"path/to/flattened.pdf" saveFlags:FSPDFDocSaveFlagNormal];
备注
flattenAnnots: 参数为 YES 时扁平化所有注释,为 NO 时仅扁平化表单字段。
扁平化单个注释
objc
FSPDFPage *page = [doc getPage:0];
FSAnnot *annot = [page getAnnot:0];
if (annot && ![annot isEmpty]) {
[page flattenAnnot:annot];
}
典型应用场景
| 场景 | 推荐方案 |
|---|---|
| 团队协作审阅 — 在成员间传递注释 | 导出为 XFDF 后分发,各成员导入到本地文档 |
| 服务端集中处理注释 | 使用 XFDF(XML 格式)便于解析和数据库存储 |
| 生成最终发布文档 — 注释不可编辑 | 先导出注释备份,再扁平化所有注释 |
| 归档保存 — 确保一致呈现 | 扁平化所有注释和表单字段 |