Skip to content

保存文档

福昕 PDF SDK iOS 版提供了多种保存文档的方式,支持同步保存和保存到自定义输出流。根据使用场景不同,可通过 Core SDK(FSPDFDoc)或 FSPDFViewCtrl 来操作。

通过 FSPDFDoc 保存

同步保存

objc
[doc saveAs:outputPath saveFlags:FSPDFDocSaveFlagNormal];

异步保存(渐进式)

适用于大文件保存场景,可结合 FSPauseCallback 实现中断与恢复:

objc
FSProgressive *progressive = [doc startSaveAs:outputPath
                                    saveFlags:FSPDFDocSaveFlagNormal
                                        pause:nil];

FSProgressState state = FSProgressiveToBeContinued;
while (state == FSProgressiveToBeContinued) {
    state = [progressive resume];
}

保存到自定义输出流

通过实现 FSFileWriterCallback 协议将文档写入自定义目标:

objc
FSProgressive *progressive = [doc startSaveAs:fileWriterCallback
                                    saveFlags:FSPDFDocSaveFlagNormal
                                        pause:nil];

FSProgressState state = FSProgressiveToBeContinued;
while (state == FSProgressiveToBeContinued) {
    state = [progressive resume];
}

保存标志位

常量说明
FSPDFDocSaveFlagNormal普通保存
FSPDFDocSaveFlagIncremental增量保存(仅追加修改部分,速度更快)
FSPDFDocSaveFlagNoOriginal不保留原始数据(完全重写)
FSPDFDocSaveFlagXRefStream使用交叉引用流(XRef Stream)
FSPDFDocSaveFlagRemoveRedundantObjects移除冗余对象(减小文件体积)
FSPDFDocSaveFlagLinearized线性化保存(优化 Web 浏览体验)

标志位可通过 | 组合使用:

objc
[doc saveAs:outputPath
  saveFlags:FSPDFDocSaveFlagIncremental | FSPDFDocSaveFlagRemoveRedundantObjects];

通过 FSPDFViewCtrl 保存

FSPDFViewCtrl 封装了面向 UI 场景的保存方法:

objc
// 保存到文件路径
[pdfViewCtrl saveDoc:filePath flag:FSPDFDocSaveFlagNormal];

// 保存到自定义输出流
[pdfViewCtrl saveDocToFileWriter:fileWriterCallback flag:FSPDFDocSaveFlagNormal];

完整示例

objc
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:inputPath];
[doc load:nil];

// ... 对文档进行修改 ...

// 增量保存到新文件
[doc saveAs:outputPath saveFlags:FSPDFDocSaveFlagIncremental];

API 参考

FSPDFDoc 的完整接口说明请参阅 API 手册