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

时间:2015-01-05 13:40:22

标签: java pdf-generation itext

我正在使用iText 5创建一个pdf,并希望添加一个页脚。我做了所有的事情,比如书" iText in action"在第14章说。

没有错误,但页脚没有出现。 有人可以告诉我我做错了吗?

我的代码:

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;
    }
}

2 个答案:

答案 0 :(得分:1)

您报告的问题无法复制。我已经采用了您的示例,并使用此事件创建了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()方法为您提供页面顶部,因此您可能需要计算相对于页面y的{​​{1}}位置。

您的bottom()方法中也存在错误:

footer()

您定义名为private Phrase footer() { Font ffont = new Font(Font.FontFamily.UNDEFINED, 5, Font.ITALIC); Phrase p = new Phrase("this is a footer"); return p; } 的{​​{1}},但您不使用它。我想你打算写:

Font

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

答案 1 :(得分:0)

使用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);