我一直在研究一个模块,它需要使用itext标记所有PDF的第一页。 虽然当我为组合pdfs尝试相同的逻辑时,代码对于普通的PDF工作正常。但是它是相同的代码片段:
try {
PdfReader reader = new PdfReader("D:\\Test\\test.pdf");
System.out.println(reader.getNumberOfPages());
PdfStamper stamper = new PdfStamper(reader,new FileOutputStream("D:\\Test\\test_stamped.pdf"));
PdfContentByte canvas = stamper.getOverContent(i);
PdfDictionary root = reader.getCatalog();
canvas.beginText();
BaseFont baseFont = BaseFont.createFont(BaseFont.HELVETICA_BOLD, "ASCII", false);
canvas.setFontAndSize(baseFont, 14);
canvas.setRGBColorFill(255, 0, 0);
canvas.showTextAligned(PdfContentByte.ALIGN_CENTER, "Test Stamping-Pg"+i, 30, 1, 0);
canvas.endText();
stamper.setFormFlattening(true);
stamper.close();
reader.close();
System.out.println("Stamping complete..");
} catch (Throwable t) {
t.printStackTrace();
}
如果有人能帮助我,那将非常有帮助。
答案 0 :(得分:1)
根据PDF规范ISO 32000-1(其中"投资组合"被称为#34;便携式馆藏")
当符合本标准的阅读器首次打开包含集合的PDF文档时,它将显示初始文档的内容以及 EmbeddedFiles 名称树中存在的文档列表。文档列表应包括集合模式指定的其他文档信息。初始文档可以是容器PDF或其中一个嵌入文档。
注2:初始文档中的页面内容应包含帮助用户理解集合中包含内容的信息,例如标题和介绍段落。
因此,如果初始文档不是容器文档而是包含文档,则您具有包含文档的提取,操作它,并将其原始版本替换为集合中的操作版本。
您可以通过检查收集字典来检查初始文档是否不是容器文档,而是包含的文档:
表155 - 集合词典中的条目
<强> d 强> 字节串 (可选)一个字符串,用于标识 EmbeddedFiles 名称树中的条目,确定最初应在用户界面中显示的文档。如果 D 条目丢失或出错,则初始文档应为包含收集字典的文档。