将 Empty/Blank 页添加到 PdfDocument java
Add Empty/Blank Page to PdfDocument java
有什么方法可以将空白页添加到现有的 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.
该异常表明您初始化 PdfDocument
时只有 PdfReader
,没有 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();
有什么方法可以将空白页添加到现有的 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.
该异常表明您初始化 PdfDocument
时只有 PdfReader
,没有 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();