0

我想在 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 文件并将它们合并到一个文件中。所以,我想在上面的循环本身中添加文本,而不是再次迭代文件。

4

3 回答 3

5

如果要自动将内容添加到每个页面,则需要一个页面事件。这在我的书“ 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。添加页脚时需要考虑到这一点。页脚的 y 值低于页眉的 y 值。

欲了解更多信息:请参阅我的书。

于 2012-11-20T06:55:46.137 回答
2

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

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

于 2012-11-20T07:35:34.190 回答
0

也许在这里可能会有所帮助...我怀疑您想要执行以下操作:

cb.addTemplate(page, 0, 0);

document.add(new Paragraph("My Text here"));  
document.setFooter(new HeaderFooter("Footnote goes here"));
}
pageOfCurrentReaderPDF = 0;
于 2012-11-20T03:46:29.387 回答