使用ITEXT以PDF格式显示页码

时间:2011-04-19 14:27:47

标签: java itext

我们正在使用Itext在我们的Web应用程序中生成PDF。 PDF正在正确生成。

我需要在页脚中显示一些版权信息以及页码。我需要在底部的左侧显示版权信息,而在底部的右侧显示页码。

我已经浏览了谷歌和一些文章,使用它们我可以在底部添加页脚。但是这个页脚仅显示底部右侧的版权。

如何使用Itext为此添加页码?

以下是我用于在页脚右侧生成版权信息的代码。

    static class HeaderFooter extends PdfPageEventHelper {
    public void onEndPage(PdfWriter writer, Document document) {
        Rectangle rect = writer.getBoxSize("footer");
        BaseFont bf_times;
        try {
            bf_times = BaseFont.createFont(BaseFont.TIMES_ROMAN, "Cp1252",
                    false);
            Font font = new Font(bf_times, 9);
            ColumnText.showTextAligned(writer.getDirectContent(),
                    Element.ALIGN_LEFT, new Phrase("Copyright 2011",
                            font), (rect.getLeft() + rect.getRight()) / 2,
                    rect.getBottom() - 18, 0);
        } catch (DocumentException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以下是用于显示页码的代码。我无法将这两者结合起来同时显示页码和版权信息。

ColumnText.showTextAligned(writer.getDirectContent(),
    Element.ALIGN_RIGHT,
    new Phrase(String.format("%d", writer.getPageNumber()),
            font), (rect.getLeft() + rect.getRight()) / 2,
    rect.getBottom() - 18, 0);

1 个答案:

答案 0 :(得分:6)

showTextAligned函数采用以下参数。

public static void showTextAligned(PdfContentByte canvas,
                                   int alignment,
                                   Phrase phrase,
                                   float x,
                                   float y,
                                   float rotation)

在您的示例中,您将两个项目的x值设置为相同的值,因此您可能正在将一个文本写在另一个上。尝试调整x值以查看是否有帮助。

具体来说,尝试设置代码的页码块,使其与页脚矩形的右侧对齐。

ColumnText.showTextAligned(writer.getDirectContent(),
    Element.ALIGN_RIGHT,
    new Phrase(String.format("%d", writer.getPageNumber()),
            font),  rect.getRight(),
    rect.getBottom() - 18, 0);

此外,您可以使用PDFStamper将事实后的页眉和页脚添加到PDF文档中。有时这可能是一种更简单的方法。 iText in Action书中有几个例子。 Here's the code sample for one of them.