使用 PDFBox 添加页面不起作用
Adding a page with PDFBox doesn't work
我正在尝试向现有 PDF 文档添加一个页面,我在应该添加该页面之前和之后对其执行多个不同的操作。
目前我打开文档开头的页面,在第一页和第二页写东西。在第二页上,我也添加了一些图像。每个 PDF 上写的内容各不相同,有时内容太多,两页(有时甚至 3 页)都不够。现在,一旦第二页上有一定数量的 text/printed 图像,我就会尝试添加第三页甚至第四页。
不知怎么的,无论我做什么,我要添加的第三页都没有出现在最终文档中。这是我添加页面的代码:
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 子句之后的代码包含多个 contentStreams,它们应该在新页面(以及第一页和第二页)上写入文本。
contentStream = new PDPageContentStream(doc, (PDPage) allPages.get((int)p), true, true);
最后,我通过
保存文档
doc.save(tarFolder+nr.get(i)+".pdf");
doc.close();
我用 class 创建了一个全新的项目,它应该做完全相同的事情 - 将页面添加到另一个 PDF。这段代码工作得很好,第三页出现了——所以我好像漏掉了什么。我的代码在第 1 + 2 页上运行得非常好,我们刚刚遇到了一个新案例,我们最近有时需要一个 third/fourth 页面,所以我想将它集成到我的主项目中。
这是有效的新项目:
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();
页面显示在最终文档中没有任何问题。
我正在尝试向现有 PDF 文档添加一个页面,我在应该添加该页面之前和之后对其执行多个不同的操作。
目前我打开文档开头的页面,在第一页和第二页写东西。在第二页上,我也添加了一些图像。每个 PDF 上写的内容各不相同,有时内容太多,两页(有时甚至 3 页)都不够。现在,一旦第二页上有一定数量的 text/printed 图像,我就会尝试添加第三页甚至第四页。
不知怎么的,无论我做什么,我要添加的第三页都没有出现在最终文档中。这是我添加页面的代码:
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 子句之后的代码包含多个 contentStreams,它们应该在新页面(以及第一页和第二页)上写入文本。
contentStream = new PDPageContentStream(doc, (PDPage) allPages.get((int)p), true, true);
最后,我通过
保存文档doc.save(tarFolder+nr.get(i)+".pdf");
doc.close();
我用 class 创建了一个全新的项目,它应该做完全相同的事情 - 将页面添加到另一个 PDF。这段代码工作得很好,第三页出现了——所以我好像漏掉了什么。我的代码在第 1 + 2 页上运行得非常好,我们刚刚遇到了一个新案例,我们最近有时需要一个 third/fourth 页面,所以我想将它集成到我的主项目中。
这是有效的新项目:
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();
页面显示在最终文档中没有任何问题。