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

Java iText-将内容添加到现有页面的底部,java,itext,Java,Itext,我想在PDF文件的每一页中添加一段文本。很好。但是,文本会添加到页面顶部。我想把我的文字添加到每页的底部。我该怎么做 下面是代码的相关部分 while (iteratorPDFReader.hasNext()) { PdfReader pdfReader = iteratorPDFReader.next(); // Create a new page in the target for each source page. while (p

我想在PDF文件的每一页中添加一段文本。很好。但是,文本会添加到页面顶部。我想把我的文字添加到每页的底部。我该怎么做

下面是代码的相关部分

    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;
    }
while(iteratorPDReader.hasNext()){
PdfReader PdfReader=iteratorpdfreeader.next();
//在目标中为每个源页面创建一个新页面。
而(pageOfCurrentReaderPDF
该代码是函数的一部分,该函数接受文件夹,读取其中的PDF文件,并将它们合并到一个文件中。因此,我想在上面的循环中添加文本,而不是再次迭代文件

也许在这里有帮助。。。我怀疑你想做如下事情:

cb.addTemplate(page, 0, 0);

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

如果要自动向每个页面添加内容,则需要一个页面事件。 这在我的书“第五章”中有解释。 如果你没有这本书,你可以参考例子。 您还可以通过查找关键字来找到解决方案

你提到的例子乍一看并不正确。当然,您可以使用“两个过程”,一个用于创建内容,另一个用于添加页眉或页脚,但建议的解决方案与建议的解决方案不同:

您在复制问题中的错误:您究竟为什么要将刚刚创建的文档导入到新文档中,从而丢弃添加到该文档中的所有可能的交互?这根本没有道理。令人难以置信的是,这个答案获得了那么多的支持票。我是iText的原始开发者,我对这个答案一点也不满意

在您的情况下,可能不需要先在内存中创建文档,然后再添加页脚。看看

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

记录的注意事项:

  • 不要使用
    onStartPage()
    添加内容
  • 不要向传递到页面事件的
    文档
    对象添加任何内容
  • 除非指定不同的页面大小,否则左下角的坐标
    x=0;y=0
    。在添加页脚时,需要考虑到这一点。页脚的y值低于页眉的y值
欲了解更多信息,请参阅我的书。

查看iText的第二版,特别是第6.4.1小节:连接和拆分PDF文档


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

自2005年以来,该技术从未被记录过。在2006年编写的书中故意省略了它,并在2008年或2009年从iText中删除了该功能。是的,我的jar没有HeaderFooter类。@BrunoLowagie链接的文档有你的技巧,但我提供的片段似乎更清晰。感谢详细的回答!我不拥有这本书,但我一直在引用这些例子。我上面粘贴的代码是由示例代码形成的。正如我所解释的,我有几个文件需要附加一些内容(每个页面不同),然后合并成一个PDF。这是整个函数的pastebin,它是否使用了比应该使用的更多的资源?这是奇怪的代码。有关如何正确连接PDF的完整概述,请阅读。在您的代码中,您丢弃了原始文档中存在的所有可能的交互(链接、注释等)。p188上的示例(标题为“使用PdfCopy添加内容”)以更好的方式解决了这个问题好吧,虽然我把它作为一个答案发布,@BrunoLowagie在他的评论中也引用了最符合要求的样本……投票反对“我是iText的原始开发者”。注释您的代码。示例中的ColumnText.showTextAligned行显示空指针错误。知道为什么吗?这个例子不应该失败。我一到办公室就会运行它进行检查。您是按原样尝试该示例,还是已经根据您的用例对其进行了调整?在后一种情况下:怎么做?我刚刚运行了这个示例(使用了iText的最新版本和iText-In-Action的示例,第二版),它执行得非常完美。因此,您运行它的方式肯定存在一些问题。