我正在尝试向现有的 PDF 文档添加一个页面,我在应该添加该页面之前和之后对其执行多个不同的操作。
目前我打开文件开头的页面,在第一页和第二页写东西。在第二页上,我也添加了一些图像。每个 PDF 上写的内容各不相同,有时内容太多,两页(有时甚至 3 页)都不够。现在,一旦第二页上有一定数量的书面文本/打印图像,我就会尝试添加第三页甚至第四页。
不知何故,无论我做什么,我要添加的第三页都没有出现在最终文档中。这是我添加页面的代码:
if(doc.getNumberOfPages() < p+1){
PDDocument emptyDoc = PDDocument.load("./data/EmptyPage.pdf");
PDPage emptyPage = (PDPage)emptyDoc.getDocumentCatalog().getAllPages().get(0);
doc.addPage(emptyPage);;
emptyDoc.close();
}
当我之前检查 doc.getNumberOfPages() 时,它显示 2。之后它显示 3。最终文档仍然只有 2 页。 if 子句之后的代码包含多个内容流,它们应该在新页面(以及第一页和第二页)上写入文本。
contentStream = new PDPageContentStream(doc, (PDPage) allPages.get((int)p), true, true);
最后,我通过
保存文档doc.save(tarFolder+nr.get(i)+".pdf");
doc.close();
我创建了一个全新的项目,其中包含一个类,该类应该做完全相同的事情——将页面添加到另一个 PDF。这段代码工作得很好,第三页出现了——所以我好像漏掉了什么。我的代码在第 1 + 2 页上运行得非常好,我们最近遇到了一个新案例,有时我们需要第三页/第四页,所以我想将其集成到我的主项目中。
这是有效的新项目:
PDDocument doc = PDDocument.load("D:\\test.pdf");
PDDocument doc2 = PDDocument.load("D:\\EmptyPage.pdf");
List<PDPage> allPages = doc2.getDocumentCatalog().getAllPages();
PDPage page = (PDPage) allPages.get(pageNumber);
doc.addPage(page);
doc.save("D:\\testoutput.pdf");
在我的主项目中奇怪的是,我添加的第三页被计入
"getNumberOfPages()"
但不会出现在最终产品中。如果我不添加页面,程序会抛出错误,因为它会尝试在第三页上写入内容。
知道我做错了什么吗?
提前致谢!
编辑:
如果我在开头添加页面,当我的文档第一次加载时,页面会添加并存在于我的最终文档中 - 如下所示:
doc = PDDocument.load(config.getFolder("template"));
PDDocument emptyDoc = PDDocument.load("./data/EmptyPage.pdf");
PDPage emptyPage = (PDPage)emptyDoc.getDocumentCatalog().getAllPages().get(0);
doc.addPage(emptyPage);
但是,由于某些文档不需要那个额外的页面,它变得不必要地复杂 - 我觉得如果不需要它就删除页面并不是很漂亮,因为我想避免将它添加到第一名。也许现在有人有想法了?
最佳答案
感谢 Tilman Hausherr,我找到了答案。
如果我移动
emptyDoc.close()
到我的代码的末尾,紧接着:
doc.save(tarFolder+nr.get(i)+".pdf");
doc.close();
页面显示在最终文档中没有任何问题。
关于java - 使用 PDFBox 添加页面不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36641935/