我正在尝试将一个页面添加到现有的PDF文档中,我在页面应该添加之前和之后执行多个不同的操作。
目前我在文档的开头打开页面,并在其第一页和第二页上写东西。在第二页,我还添加了一些图像。在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。
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);
然而,由于某些文档不需要额外的页面,它会变得不必要地复杂化 - 我觉得如果不需要它就删除页面并不是很漂亮,因为我想避免添加它第一名。也许现在有人有想法?
答案 0 :(得分:1)
感谢Tilman Hausherr,我找到了答案。
如果我移动
emptyDoc.close()
到我的代码的末尾,紧接着:
doc.save(tarFolder+nr.get(i)+".pdf");
doc.close();
页面显示在最终文档中,没有任何问题。