如何将文本添加为​​页眉或页脚?

How to add text as a header or footer?

我正在使用 iText 5 创建一个 pdf 文件并想添加一个页脚。我做了第 14 章 "iText in action" 书中所说的一切。

没有错误,但没有显示页脚。 有人可以告诉我我做错了什么吗?

我的代码:

public class PdfBuilder {

    private Document document;

    public void newDocument(String file) {
        document = new Document(PageSize.A4);
        writer = PdfWriter.getInstance(document, new FileOutputStream(file));
        MyFooter footerEvent = new MyFooter();
        writer.setPageEvent(footerEvent);
        document.open();

        ...

        document.close();
        writer.flush();
        writer.close();
    }

    class MyFooter extends PdfPageEventHelper {

    public void onEndPage(PdfWriter writer, Document document) {
        PdfContentByte cb = writer.getDirectContent();
        ColumnText.showTextAligned(cb, Element.ALIGN_CENTER, footer(), (document.right() - document.left()) / 2
                + document.leftMargin(), document.top() + 10, 0);

    }

    private Phrase footer() {
        Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
        Phrase p = new Phrase("this is a footer");
        return p;
    }
}

您报告的问题无法重现。我以你的例子为例,我用这个事件创建了 TextFooter 例子:

class MyFooter extends PdfPageEventHelper {
    Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);

    public void onEndPage(PdfWriter writer, Document document) {
        PdfContentByte cb = writer.getDirectContent();
        Phrase header = new Phrase("this is a header", ffont);
        Phrase footer = new Phrase("this is a footer", ffont);
        ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
                header,
                (document.right() - document.left()) / 2 + document.leftMargin(),
                document.top() + 10, 0);
        ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
                footer,
                (document.right() - document.left()) / 2 + document.leftMargin(),
                document.bottom() - 10, 0);
    }
}

请注意,我通过仅创建一次 FontParagraph 实例提高了性能。我还介绍了页脚和页眉。您声称要添加页脚,但实际上您添加了页眉。

top() 方法为您提供页面顶部,因此您可能打算计算相对于页面 bottom()y 位置。

您的 footer() 方法也有错误:

private Phrase footer() {
    Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
    Phrase p = new Phrase("this is a footer");
    return p;
}

您定义了一个名为 ffontFont,但您没有使用它。我想你是想写:

private Phrase footer() {
    Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC);
    Phrase p = new Phrase("this is a footer", ffont);
    return p;
}

现在当我们查看 resulting PDF 时,我们清楚地看到作为页眉和页脚添加到每个页面的文本。

通过使用 PdfContentByte 的 showTextAligned 方法,我们可以在页面中添加页脚。我们应该将页脚内容作为字符串传递给 showTextAligned 方法,而不是短语,作为参数之一。如果要格式化页脚内容,请在将其传递给方法之前执行。下面是示例代码。

 PdfContentByte cb = writer.getDirectContent();
 cb.showTextAligned(Element.ALIGN_CENTER, "this is a footer", (document.right() - document.left()) / 2 + document.leftMargin(), document.bottom() - 10, 0);