Skip to content

保存文档

福昕 PDF SDK 安卓版提供了多种保存文档的方式,支持同步保存、异步(渐进式)保存以及保存到自定义输出流。根据使用场景不同,可通过 Core SDK(PDFDoc)或 PDFViewCtrl 来操作。

通过 PDFDoc 保存

同步保存

java
doc.saveAs(outputPath, PDFDoc.e_SaveFlagNormal);

异步保存(渐进式)

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

java
Progressive progressive = doc.startSaveAs(outputPath, PDFDoc.e_SaveFlagNormal, null);

int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
    state = progressive.resume();
}

保存到自定义输出流

通过实现 FileWriterCallback 将文档写入自定义目标(如网络流、加密存储等):

java
Progressive progressive = doc.startSaveAs(fileWriterCallback,
    PDFDoc.e_SaveFlagNormal, null);

int state = Progressive.e_ToBeContinued;
while (state == Progressive.e_ToBeContinued) {
    state = progressive.resume();
}

保存标志位

常量说明
e_SaveFlagNormal0x0000普通保存
e_SaveFlagIncremental0x0001增量保存(仅追加修改部分,速度更快)
e_SaveFlagNoOriginal0x0002不保留原始数据(完全重写)
e_SaveFlagXRefStream0x0008使用交叉引用流(XRef Stream)
e_SaveFlagRemoveRedundantObjects0x0010移除冗余对象(减小文件体积)
e_SaveFlagNoUpdatingMetadataDateTime0x0020不更新元数据中的日期时间
e_SaveFlagLinearized0x1000线性化保存(优化 Web 浏览体验)

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

java
doc.saveAs(outputPath,
    PDFDoc.e_SaveFlagIncremental | PDFDoc.e_SaveFlagRemoveRedundantObjects);

通过 PDFViewCtrl 保存

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

java
// 保存到文件路径
pdfViewCtrl.saveDoc(filePath, PDFDoc.e_SaveFlagNormal);

// 保存到自定义输出流
pdfViewCtrl.saveDoc(fileWriterCallback, PDFDoc.e_SaveFlagNormal);

完整示例

java
PDFDoc doc = new PDFDoc(inputPath);
doc.load(null);

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

// 增量保存到新文件
doc.saveAs(outputPath, PDFDoc.e_SaveFlagIncremental);

API 参考

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