【问题标题】:Add Empty/Blank Page to PdfDocument java将空/空白页添加到 PdfDocument java
【发布时间】:2020-02-12 04:55:55
【问题描述】:

有什么方法可以将空白页添加到现有的 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 文档中插入空白页的正确方法是什么?

【问题讨论】:

标签: java pdf itext pdf-generation pdfdocument


【解决方案1】:

com.itextpdf.kernel.PdfException: 没有关联的 PdfWriter 用于制作间接。

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

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

这些文件仅供阅读。 (实际上你可以做一些小的操作,但没有添加页面那么大。)

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

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

如果要将编辑后的文件存储在与原始文件相同的位置, 您不得使用与PdfReader 中的SOURCE 和PdfWriter 中的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 中的 Pdfs
  • 我添加了一些代码。我最初没有添加它,因为它主要不是特定于 PDF,而是基本的 Java 内容。
  • 你能检查我关于 PDF 的新问题吗? stackoverflow.com/questions/58415525/…
猜你喜欢
  • 2015-04-21
  • 2014-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多