如何向表头添加页码

  • 本文关键字:添加 表头 java itext
  • 更新时间 :
  • 英文 :


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

示例:我的标题行是"Table about stuff"。我计算了一下,这个表被分成了3页。结果头应该看起来像这样:第一页是"Table about things 1/3"第二页的"关于2/3的表格"第三页"Table about stuff 3/3"

最好的方法是什么?这可能吗?

最好的方法是使用单元格事件。

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

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

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

让我们看一下RunLengthEvent的例子,我们使用了一个名为PressPreview的自定义PdfPCellEvent:

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跟踪事件被触发的次数。当完整的表格被添加到文档中时,Y将等于X,您可以在PdfTemplate上填写此值。

总结:你想要的不是不可能的,但也不是微不足道的。

最新更新