0

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

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

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

4

1 回答 1

1

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

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

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

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

让我们看一下使用自定义命名的RunLengthEvent示例:PdfPCellEventPressPreview

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

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

于 2013-04-23T15:36:08.297 回答