![](/img/trans.png)
[英]Show the number of pages in a pdf generated using itext only on the first page
[英]Stamping the first page of portfolio pdf using itext
我一直在研究一个模块,它需要使用 itext 标记所有 PDF 的第一页。 虽然当我为投资组合 pdf 尝试相同的逻辑时,代码对于普通 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();
}
如果有人可以帮助我,那将非常有帮助。
根据 PDF 规范 ISO 32000-1(其中“投资组合”被称为“便携式集合”),
当符合标准的阅读器首次打开包含集合的 PDF 文档时,它应显示初始文档的内容以及EmbeddedFiles名称树中存在的文档列表。 文档列表应包括集合模式指定的附加文档信息。 初始文档可能是容器 PDF 或嵌入文档之一。
注 2:初始文档中的页面内容应包含有助于用户理解集合中包含的内容的信息,例如标题和介绍性段落。
因此,如果初始文档不是容器文档而是包含的文档,则您可以提取包含的文档,对其进行操作,并将其原始版本替换为集合中您操作过的版本。
您可以通过检查集合字典来检查初始文档是否不是容器文档而是包含的文档:
表 155 – 集合字典中的条目
D字节字符串(可选)一个字符串,用于标识EmbeddedFiles名称树中的条目,确定最初应在用户界面中显示的文档。 如果D条目丢失或错误,则初始文档应为包含集合字典的文档。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.