如何将页码添加到表头?

时间:2013-04-23 15:03:00

标签: java itext

我创建了一个分为多个页面的PdfPTable(带有标题)。我在模拟模式下使用ColumnText来添加表并计算表格显示的页数。现在我正在寻找为每个标题添加x / n计数器的最佳方法。

示例:我的标题行是“关于东西的表”。我计算,该表分为3页。生成的标题应如下所示: 第1页的“关于东西1/3”的表, 第2页的“关于东西2/3的表”, 第3页的“关于东西3/3的表”。

最好的方法是什么?它甚至可能吗?

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是使用单元格事件。

我没有现成的例子,但你可以通过结合以下例子自己编写一个例子:

MovieCountries1示例中,我解决了“Y页X”问题。您始终知道X的值,但只要您仍在创建文档,您就不知道Y的值(这是总页数)。在您的情况下,您有类似的问题。你想添加“Y部分X”。

您可以通过添加为其创建自定义PdfPCellEvent的emptry单元格来实现此目的。您可以通过在官方iText网站上查找关键字PdfPCell > events找到包含单元格事件的几个示例。

让我们看看我们使用名为PdfPCellEvent的自定义PressPreview的{​​{3}}示例:

class PressPreview implements PdfPCellEvent {

    public BaseFont bf;

    public PressPreview() throws DocumentException, IOException {
        bf = BaseFont.createFont();
    }

    public void cellLayout(PdfPCell cell, Rectangle rect,
            PdfContentByte[] canvas) {
        PdfContentByte cb = canvas[PdfPTable.TEXTCANVAS];
        cb.beginText();
        cb.setFontAndSize(bf, 12);
        cb.showTextAligned(Element.ALIGN_RIGHT, "PRESS PREVIEW",
            rect.getRight() - 3, rect.getBottom() + 4.5f, 0);
        cb.endText();
    }
}

在此示例中,文本“PRESS PREVIEW”将添加到您已添加此事件的所有单元格中,如下所示:

PdfPCellEvent press = new PressPreview();
PdfPCell cell = new PdfPCell();
cell.setCellEvent(press);

在您的情况下,您将向自定义事件添加两个成员变量。一个PdfTemplate,您将写入Y的值。一个int跟踪事件被触发的次数。这是X.当整个表格已添加到文档中时,Y将等于X,您可以在PdfTemplate上填写此值。

总结:你想要的并非不可能,但这并非无足轻重。