使用PDFBox添加页面不起作用

时间:2016-04-15 08:24:20

标签: java pdf document pdfbox

我正在尝试将一个页面添加到现有的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);

然而,由于某些文档不需要额外的页面,它会变得不必要地复杂化 - 我觉得如果不需要它就删除页面并不是很漂亮,因为我想避免添加它第一名。也许现在有人有想法?

1 个答案:

答案 0 :(得分:1)

感谢Tilman Hausherr,我找到了答案。

如果我移动

emptyDoc.close()

到我的代码的末尾,紧接着:

doc.save(tarFolder+nr.get(i)+".pdf");
doc.close();

页面显示在最终文档中,没有任何问题。