我正在尝试将页面添加到现有的PDF文档中,该页面应该在应该添加页面之前和之后执行多种不同的操作。
目前,我在文档的开头打开页面,并在文档的第一页和第二页上写东西。在第二页上,我还添加了一些图像。PDF上写的Stuff随PDF的不同而不同,有时太多的东西使两页(有时甚至三页)不够用。现在,一旦第二页上有一定数量的文字/打印图像,我将尝试添加第三页甚至第四页。
无论如何,我要添加的第三页都不会显示在最终文档中。这是我添加页面的代码:
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应该在新页面(以及第一和第二页面)上写文本。
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();
该页面显示在最终文档中,没有任何问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句