Skip to content

导入与导出

福昕 PDF SDK iOS 版支持通过 FDF 和 XFDF 格式导入和导出注释数据,方便在不同文档或系统间交换注释。此外,SDK 还提供注释扁平化功能,可将注释内容永久合并到页面中。

FDF 与 XFDF 格式

格式常量说明
FDFFSFDFDocFDFForms Data Format,PDF 规范定义的二进制格式
XFDFFSFDFDocXFDFXML 版本的 FDF,基于 XML 文本格式,便于解析和集成

FSFDFDoc 是操作 FDF/XFDF 文件的核心类:

方法说明
initWithType:创建空 FDF 文档(FSFDFDocFDFFSFDFDocXFDF
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 格式)便于解析和数据库存储
生成最终发布文档 — 注释不可编辑先导出注释备份,再扁平化所有注释
归档保存 — 确保一致呈现扁平化所有注释和表单字段