iText – 将内容添加到现有页面的底部

我想在PDF文件的每个页面上添加一段文字。 这个答案在SO中工作得很好。 但是,文本被添加到页面顶部。 我想将我的文字添加到每个页面的底部。 我该怎么做呢?

这是代码的相关部分。

while (iteratorPDFReader.hasNext()) { PdfReader pdfReader = iteratorPDFReader.next(); // Create a new page in the target for each source page. while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) { document.newPage(); pageOfCurrentReaderPDF++; currentPageNumber++; page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF); cb.addTemplate(page, 0, 0); document.add(new Paragraph("My Text here")); //As per the SO answer } pageOfCurrentReaderPDF = 0; } 

代码是函数的一部分,该函数接受文件夹,读取其中的PDF文件并将它们合并为一个文件。 所以,我想在上面的循环中添加文本,而不是再次迭代文件。

请查看iText in Action第2版第6章 ,特别是第6.4.1小节:连接和拆分PDF文档。

代码清单6.22, ConcatenateStamp.java ,向您展示了如何从多个其他PDF的页面副本(在您的情况下:所有页面)创建PDF; 该示例另外添加了一个新的“Page X of Y”页脚; 这演示了如何在合并源文件的同时在页面上的给定位置添加内容。

如果要自动向每个页面添加内容,则需要页面事件。 这在我的书“ iText in Action – Second Edition ”的第5章中有解释。 如果您没有该书的副本,可以参考此处的示例。 您还可以通过查找关键字Header / Footer来找到解决方案。

你所指的例子一见不正确。 当然,您可以使用“两遍”,一个用于创建内容,另一个用于添加页眉或页脚,但建议的解决方案与推荐的解决方案不同: http : //itextpdf.com/examples/iia.php?id = 118

您正在复制问题中的错误:为什么您要将刚刚创建的文档导入到新文档中,从而丢弃您添加到该文档中的所有可能的交互性? 它没有意义。 令人难以置信的是,这个答案得到了许多上升票。 我是iText的原始开发者,我对这个答案并不满意!

在您的情况下,可能不需要先在内存中创建文档,然后再添加页脚。 请查看http://itextpdf.com/examples/iia.php?id=104

您需要创建一个PdfPageEvent实现(例如使用PdfPageEventHelper ),您需要实现onEndPage()方法。

记录警告:

  • 不要使用onStartPage()来添加内容,
  • 不要向传递给页面事件的Document对象添加任何内容,
  • 除非您指定了不同的页面大小,否则左下角的坐标为x = 0; y = 0 x = 0; y = 0 。 添加页脚时需要考虑到这一点。 页脚的y值低于标题的y值。

有关更多信息:请参阅我的书。

也许这可能在这里有所帮助……我怀疑你想做类似以下的事情:

 cb.addTemplate(page, 0, 0); document.add(new Paragraph("My Text here")); document.setFooter(new HeaderFooter("Footnote goes here")); } pageOfCurrentReaderPDF = 0;