java - 添加空/空白页到 PdfDocument java

标签 java pdf itext pdf-generation pdfdocument

有什么方法可以将空白页添加到现有的 PdfDocument 中吗?我创建了一个这样的方法:

  public void addEmptyPage(PdfDocument pdfDocument){
    pdfDocument.addNewPage();
    pdfDocument.close();
}

但是,当我将它与 PdfDocument 一起使用时,它会抛出:

com.itextpdf.kernel.PdfException: There is no associate PdfWriter for making indirects.
at com.itextpdf.kernel.pdf.PdfObject.makeIndirect(PdfObject.java:228) ~[kernel-7.1.1.jar:?]
at com.itextpdf.kernel.pdf.PdfObject.makeIndirect(PdfObject.java:248) ~[kernel-7.1.1.jar:?]
at com.itextpdf.kernel.pdf.PdfPage.<init>(PdfPage.java:104) ~[kernel-7.1.1.jar:?]
at com.itextpdf.kernel.pdf.PdfDocument.addNewPage(PdfDocument.java:416) ~[kernel-7.1.1.jar:?]

将空白页插入 pdf 文档的正确方法是什么?

最佳答案

com.itextpdf.kernel.PdfException: There is no associate PdfWriter for making indirects.

该异常表明您仅使用 PdfReader 初始化 PdfDocument,而不使用 PdfWriter。您没有显示您的 PdfDocument 实例化代码,但我假设您做了如下操作:

PdfReader reader = new PdfReader(SOURCE);
PdfDocument document = new PdfDocument(reader);

此类文档仅供阅读。 (实际上,您可以进行一些小的操作,但没有像添加页面那样大的操作。)

如果您想编辑 PDF,请使用 PdfReaderPdfWriter 初始化您的 PdfDocument,例如

PdfReader reader = new PdfReader(SOURCE);
PdfWriter writer = new PdfWriter(DESTINATION);
PdfDocument document = new PdfDocument(reader, writer);

如果要将编辑后的文件存储在与原始文件相同的位置, 您不得使用与 PdfReader 中的 SOURCEPdfWriter 中的 DESTINATION 相同的文件名.

要么先写入临时文件,关闭所有参与对象,然后用临时文件替换原始文件:

PdfReader reader = new PdfReader("document.pdf");
PdfWriter writer = new PdfWriter("document-temp.pdf");
PdfDocument document = new PdfDocument(reader, writer);
...
document.close();
Path filePath = Path.of("document.pdf");
Path tempPath = Path.of("document-temp.pdf");
Files.move(tempPath, filePath, StandardCopyOption.REPLACE_EXISTING);

或者将原始文件读入 byte[] 并从该数组初始化 PdfReader:

PdfReader reader = new PdfReader(new ByteArrayInputStream(Files.readAllBytes(Path.of("document.pdf"))));
PdfWriter writer = new PdfWriter("document.pdf");
PdfDocument document = new PdfDocument(reader, writer);
...
document.close();

关于java - 添加空/空白页到 PdfDocument java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395872/

相关文章:

asp.net - 在 MVC Razor 中使用 iTextSharp 在 MVC 中将 HTML 转换为 PDF

java - Itext 矩形不会流到页面边缘

java - 数组作为构造函数参数

pdf - 使用增量更新写入 pdf - 外部参照流

java - 为什么我的推送通知不断不规律地重复?

mysql - vb.net上传pdf到mysql

xml - XML填写PDF表格?

java - writer 无法解析 itext

java - 尝试从本地URL使用Kotlin-gradle插件

java - "Œ"的 URL 编码问题