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

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

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

最佳答案

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

我没有现成的示例,但是您可以通过合并以下示例来组成一个自己:

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

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

让我们看一下RunLengthEvent示例,其中使用名为PdfPCellEvent的自定义PressPreview

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上填写此值。

总结:想要的不是不可能的,但这并非无关紧要的。

08-27 00:48
查看更多