Skip to content
Guides

保存文档

ComPDF 支持保存到当前文档、另存为新文档,以及将文档保存到文件描述符或 Uri。

如果保存到当前文档,且文档支持增量保存,则修改内容会追加到原文件中。如果保存类型为非增量保存,或者需要移除文档权限,则 SDK 会通过全量保存流程写入目标文件。

保存方式说明

方法说明
save()保存到当前文档,等同于 save(PDFDocumentSaveType.PDFDocumentSaveIncremental)
save(PDFDocumentSaveType saveType)指定保存类型。PDFDocumentSaveNoIncrementalPDFDocumentSaveRemoveSecurity 会走全量保存流程。
save(PDFDocumentSaveType saveType, boolean fontSubset)指定保存类型,并控制是否对子集字体进行处理。
saveAs(String absolutePath, boolean removeSecurity)保存到指定路径,removeSecuritytrue 时会移除文档权限。
saveAs(String absolutePath, boolean removeSecurity, boolean saveByFile)保存到指定路径,并指定是否通过文件方式保存。
saveAs(String absolutePath, boolean removeSecurity, boolean saveByFile, boolean fontSubset)保存到指定路径,同时控制保存方式和字体子集处理。
saveAs(Uri uri, boolean removeSecurity)保存到指定 Uri。
saveAs(Uri uri, boolean removeSecurity, boolean fontSubset)保存到指定 Uri,并控制是否对子集字体进行处理。

保存当前文档

保存当前文档时,先检查文档是否有修改,再调用 save()

java
try {
  if (document.hasChanges()) {
    // 保存到当前文档。
    boolean res = document.save();
  }
} catch (CPDFDocumentException e) {
  e.printStackTrace();
} finally {
  // 关闭文档并释放资源。
  document.close();
}
kotlin
try {
  if (document.hasChanges()) {
    // 保存到当前文档。
    val res = document.save()
  }
} catch (e: CPDFDocumentException) {
  e.printStackTrace()
} finally {
  // 关闭文档并释放资源。
  document.close()
}

另存为新文档

保存到新的路径或 Uri 时,使用 saveAs()。如果需要移除文档权限,可将 removeSecurity 设置为 true

java
String outputPath = ...;
Uri outputUri = ...;

try {
  // 另存为新文档,并移除文档权限。
  document.saveAs(outputPath, true);

  // 另存为 Uri。
  document.saveAs(outputUri, false);
} catch (CPDFDocumentException e) {
  e.printStackTrace();
}
kotlin
val outputPath = ...
val outputUri = ...

try {
  // 另存为新文档,并移除文档权限。
  document.saveAs(outputPath, true)

  // 另存为 Uri。
  document.saveAs(outputUri, false)
} catch (e: CPDFDocumentException) {
  e.printStackTrace()
}

如果需要通过文件描述符保存,或者需要控制字体子集处理,可以使用 save(int fd, ...) 或带 fontSubset 参数的重载。