Java 添加带有PDFBox的页面不会';行不通

Java 添加带有PDFBox的页面不会';行不通,java,pdf,document,pdfbox,Java,Pdf,Document,Pdfbox,我正在尝试将一个页面添加到现有的PDF文档中,在添加页面之前和之后,我将对该页面执行多个不同的操作 目前,我打开文档开头的页面,在第一页和第二页上写东西。在第二页,我还添加了一些图像。在PDF上写的东西每个PDF都不一样,有时写的东西太多以至于两页(有时甚至3页)都不够。现在,当第二页上有一定数量的文字/打印图像时,我尝试添加第三页甚至第四页 不管我怎么做,我想添加的第三页都不会出现在最终文档中。以下是我添加页面的代码: if(doc.getNumberOfPages() < p+1){

我正在尝试将一个页面添加到现有的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.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");
但并没有出现在最终产品中。如果我不添加页面,程序会抛出一个错误,因为它试图在第三个页面上写入内容

知道我做错了什么吗

提前谢谢

编辑:

如果我在开始添加页面,当我的文档第一次加载时,页面将被添加并存在于我的最终文档中-如下所示:

doc = PDDocument.load(config.getFolder("template"));
PDDocument emptyDoc = PDDocument.load("./data/EmptyPage.pdf");
PDPage emptyPage = (PDPage)emptyDoc.getDocumentCatalog().getAllPages().get(0);
doc.addPage(emptyPage);

然而,由于一些文档不需要额外的页面,它会变得不必要的复杂-我觉得如果不需要的话删除页面并不是很好看,因为我想首先避免添加页面。也许现在有人有了主意?

多亏了蒂尔曼·豪瑟,我找到了答案

如果我移动

emptyDoc.close()
在我的代码末尾,紧接着:

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

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

我想知道是否
emptyDoc.close()太早了。你用的是什么版本?1.8还是2.0?@TilmanHausherr我使用的是1.8.9版。我已经尝试在一开始就实现addPage——通过编写一个方法来检查文档是否过长,如果是这样,则添加一个页面。但是,如果我这样做,页面不会再次显示-即使这是加载文档后发生的第一件事。您是否尝试在保存文档后移动
emptyDoc.close()
?这是因为关闭后会清理一些资源。这可能会导致奇怪的效果。请自己回答您的问题,我太忙了,您更了解自己的代码,并且您的问题格式很好,因此您知道该怎么做:-)
emptyDoc.close()
doc.save(tarFolder+nr.get(i)+".pdf");
doc.close();