我创建了一个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
上填写此值。总结:想要的不是不可能的,但这并非无关紧要的。