如何在PDFTron中点击按钮保存已编辑的PDF文件及XFDF格式注释
手动保存PDF注释并导出XFDF的实现方案
核心逻辑
无需额外自定义开发,直接调用PDFTron原生接口即可在按钮点击事件中完成手动保存、导出XFDF的需求,具体步骤如下:
- 拿到当前正在编辑的
PTPDFDoc实例
如果你使用PTDocumentViewController加载PDF,直接读取实例的document属性即可;如果是自己加载的PDF,就用你初始化时创建的PTPDFDoc对象。
- 拿到当前正在编辑的
- 从PDF中导出所有注释对应的FDF文档
// 第二个参数传nil代表导出全部页面的注释,也可以传入指定页码数组导出部分注释 guard let fdfDoc = pdfDoc.fdfExtract(PTSDFDoc.e_annots, pageList: nil) else { // 导出失败的异常处理逻辑 return }- 将FDF转为XFDF格式上传服务端
如果你需要直接拿XFDF字符串上传,用以下代码:
如果你需要先把XFDF存为本地文件,用以下代码:guard let xfdfString = fdfDoc.saveAsXFDFString() else { return } // 此处调用你自己的服务端上传接口,传入xfdfString即可let savePath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] + "/current_annotations.xfdf" fdfDoc.saveAsXFDF(savePath)- 将FDF转为XFDF格式上传服务端
可选操作
关闭自动保存
如果你不需要PDFTron的间隔自动保存逻辑,使用PTDocumentViewController时将autoSaveEnabled属性设置为false即可,后续只会在你点击按钮时触发保存。
保存完整PDF文件
如果你需要同时把修改后的完整PDF保存到本地,添加以下代码:
// e_incremental为增量保存,执行速度快;如果需要清理无用资源可以替换为e_remove_unused等其他枚举值 try? pdfDoc.save(toFile: yourLocalSavePath, flags: PTSaveOptions.e_incremental.rawValue)
XFDF导入说明
你贴出的代码是XFDF导入逻辑,和上述导出流程为反向操作:后续如果需要把服务端返回的XFDF同步到本地PDF,直接使用你现有导入合并代码即可。
内容的提问来源于stack exchange,提问作者bhaumik
相关产品推荐
相关产品推荐

