我创建了一个分为多个页面的PdfPTable(带有标题)。我在模拟模式下使用ColumnText来添加表并计算表格显示的页数。现在我正在寻找为每个标题添加x / n计数器的最佳方法。
示例:我的标题行是“关于东西的表”。我计算,该表分为3页。生成的标题应如下所示: 第1页的“关于东西1/3”的表, 第2页的“关于东西2/3的表”, 第3页的“关于东西3/3的表”。
最好的方法是什么?它甚至可能吗?
答案 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
上填写此值。
总结:你想要的并非不可能,但这并非无足轻重。