【发布时间】:2014-08-10 12:59:21
【问题描述】:
我正在尝试使用pdfBox 创建一个pdf document,下面提到了相同的代码段
for(int j=0;j<26;j++)
{
PDPage page = new PDPage(PDPage.PAGE_SIZE_LETTER);
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document,page);
content.setFont(font[j%15], 12);
content.beginText();
content.moveTextPositionByAmount(100, 700);
content.drawString("PDF BOX TEXT CONTENT");
content.endText();
content.close();
//generate data for first page
}
我可以创建 pdf,但是我得到的页面树与我已经为 existing PDF file 获得的具有相同内容流的页面树不同,所以我无法理解为什么 pdfBox 的工作方式不同,而创建pdf文档?如果有人能在这方面有所启发,那将是一个很大的帮助。
区别在于:
我在检查 pre-existing PDF 时得到的页面树的深度为 3,而在使用 pdfBox 创建 PDF 时正在形成的树是 1 。所以,我添加的所有 26 个页面似乎都是我的页面树根的孩子得到。
以下是文件: 已有文件:https://www.dropbox.com/s/7o7nocg5g5o7qry/ABC.pdf 新文件:https://www.dropbox.com/s/uubs36tikqkl5w1/26ABC.pdf
【问题讨论】:
-
pdfBox 在创建 pdf 文档时的工作方式有所不同 - PDF 格式允许多种方式对相同的建模。因此,当您分析 PDF 时,您必须考虑所有变体。话虽如此,您忘记解释哪些差异实际上对您来说是个问题,以及您对这里的答案的实际期望。
-
感谢 mkl 的建议。希望现在我的帖子很清楚。
-
PDF 规范 (link to Adobe's PDF 1.7) 中没有禁止页面树的深度。 PDF 创建者可以根据需要将其复杂化。
-
为什么要关心页面树呢?您不需要它来访问单个页面,只需使用 document.getDocumentCatalog().getAllPages() 。
-
谢谢,Tilman,但我只是对结构感到困惑,否则我尝试使用您稍后提到的 api。