最好的方法是使用单元格事件。
我没有现成的示例,但您可以结合以下示例自行编写:
在MovieCountries1 示例中,我解决了“Y 页的X 页”问题。你总是知道 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,用于跟踪触发事件的次数。那是X。当完整的表格添加到文档中后,你的Y将等于X,你可以在PdfTemplate上填写这个值。
总结:你想要的不是不可能,但也不是微不足道的。