保存文档
福昕 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_SaveFlagNormal | 0x0000 | 普通保存 |
e_SaveFlagIncremental | 0x0001 | 增量保存(仅追加修改部分,速度更快) |
e_SaveFlagNoOriginal | 0x0002 | 不保留原始数据(完全重写) |
e_SaveFlagXRefStream | 0x0008 | 使用交叉引用流(XRef Stream) |
e_SaveFlagRemoveRedundantObjects | 0x0010 | 移除冗余对象(减小文件体积) |
e_SaveFlagNoUpdatingMetadataDateTime | 0x0020 | 不更新元数据中的日期时间 |
e_SaveFlagLinearized | 0x1000 | 线性化保存(优化 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 手册。