Skip to content
Demo示例FAQ

PDF 生成模板编辑器

开源可视化 PDF 生成引擎,支持自定义模板,并提供面向开发者的 API,灵活构建文档生成流程。

查看 GitHub
Guides

保存文档 ​

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

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

保存方式说明 ​

方法说明
save()保存到当前文档,等同于 save(PDFDocumentSaveType.PDFDocumentSaveIncremental)。
save(PDFDocumentSaveType saveType)指定保存类型。PDFDocumentSaveNoIncremental 和 PDFDocumentSaveRemoveSecurity 会走全量保存流程。
save(PDFDocumentSaveType saveType, boolean fontSubset)指定保存类型,并控制是否对子集字体进行处理。
saveAs(String absolutePath, boolean removeSecurity)保存到指定路径,removeSecurity 为 true 时会移除文档权限。
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 参数的重载。