itextsharp添加页眉和页脚,显示在页边距内而不是页边距外

本文关键字:页边距 显示 添加 itextsharp | 更新日期: 2023-09-27 18:23:56

我是ItextSharp的新手,只是想知道如何在页面结束事件后将页眉和页脚放置在页边距之外?似乎当我使用onendpage事件而不是在页边空白外添加页脚时,它添加了页边空白内,并且当它在应该添加页边空白以外的下边距上方时,它总是会产生stackoverflow异常?

是否有任何设置可以将文本添加到文档页脚的边距之外(或者是填充)?

提前谢谢。

itextsharp添加页眉和页脚,显示在页边距内而不是页边距外

由于您是iText的新手。。。当您正在寻找有关某个特定主题的示例时,您应该首先查看iText in Action--2nd Edition中的示例的关键字列表。在您的情况下,关键字页眉/页脚是合适的。这里引用的第一个示例,part1.chapter05.MovieHistory2,已经向您展示了如何添加页眉和页脚。

首先,正如您自己已经提到的,您应该使用页面事件,确切地说是onEndPage,这最容易通过扩展PdfPageEventHelper. 来实现

此外,根据您似乎没有意识到的问题,您不应该通过调用document.add或类似的方法来添加页眉或页脚,因为这些添加会进入现在已经完成的主页面区域(毕竟我们在onEndPage中…)。相反,您应该使用直接内容访问来定位页眉和页脚。

样品是这样做的:

    /**
     * Adds the header and the footer.
     * @see com.itextpdf.text.pdf.PdfPageEventHelper#onEndPage(
     *      com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
     */
    public void onEndPage(PdfWriter writer, Document document) {
        Rectangle rect = writer.getBoxSize("art");
        switch(writer.getPageNumber() % 2) {
        case 0:
            ColumnText.showTextAligned(writer.getDirectContent(),
                    Element.ALIGN_RIGHT, header[0],
                    rect.getRight(), rect.getTop(), 0);
            break;
        case 1:
            ColumnText.showTextAligned(writer.getDirectContent(),
                    Element.ALIGN_LEFT, header[1],
                    rect.getLeft(), rect.getTop(), 0);
            break;
        }
        ColumnText.showTextAligned(writer.getDirectContent(),
                Element.ALIGN_CENTER, new Phrase(String.format("page %d", pagenumber)),
                (rect.getLeft() + rect.getRight()) / 2, rect.getBottom() - 18, 0);
    }

ColumnText.showTextAligned允许您将页眉、页脚等准确地放置在页面上所需的位置,通常位于上下页边距之外,而不会产生任何新页面或任何其他不需要的效果。

找到了它,我只是使用columntext,尽管我真的不喜欢使用columntext:),并使用setimplecolumn。