我想在PDF文件的每个页面添加一段文字。 This answer in 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文件并将它们合并为一个文件。所以,我想在上面的循环中添加文本,而不是再次迭代文件。
答案 0 :(得分:5)
如果要自动向每个页面添加内容,则需要页面事件。 这在我的书“iText in Action - Second Edition”的第5章中有解释。 如果您没有该书的副本,可以参考示例here。 您还可以通过查找关键字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
。添加页脚时需要考虑到这一点。页脚的y值低于标题的y值。欲了解更多信息:请参阅我的书。
答案 1 :(得分:2)
查看iText in Action,第2版的chapter 6,特别是在第6.4.1小节:连接和拆分PDF文档。
代码6.22 ConcatenateStamp.java向您展示了如何从多个其他PDF的页面副本(在您的情况下:所有页面)创建PDF;该示例另外添加了一个新的“Page X of Y”页脚;这演示了如何在合并源文件的同时在页面上的给定位置添加内容。
答案 2 :(得分:0)
也许this在这里可能会有所帮助......我怀疑你想做类似以下的事情:
cb.addTemplate(page, 0, 0);
document.add(new Paragraph("My Text here"));
document.setFooter(new HeaderFooter("Footnote goes here"));
}
pageOfCurrentReaderPDF = 0;