java - 使用 PDFBox 添加页面不起作用

标签 java pdf document pdfbox

我正在尝试向现有的 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 = 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();

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

关于java - 使用 PDFBox 添加页面不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36641935/

相关文章:

java - 在 ListView 项内绘制

c# - 在 MigraDoc 表中插入 "http"图像

android - 从 URL 打开 PDF

java - 如何为类似 haml 的语言编写解析器?

java - 在 Hibernate 中处理竞争条件

linux - Bash 脚本在 Linux 中将 pdf 打印为 pdf

json - 休息文件服务

swift - 在 Mac Catalyst 中使用文档浏览器 View Controller

php - 文档存储在 phpmyadmin 与网站文件夹中?

java - 从数据库中检索值。如何从Action类设置为Action Form和JSP?