【问题标题】:How to add page numbers to a table header?如何将页码添加到表头?
【发布时间】:2013-04-23 15:03:00
【问题描述】:

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

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

最好的方法是什么?有没有可能?

【问题讨论】:

    标签: java itext


    【解决方案1】:

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

    我没有现成的示例,但您可以结合以下示例自行编写:

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

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

    【讨论】:

    • 单元格事件成功了。不过,我没有使用 PdfPTemplate。我保留了对事件的引用,并在以后设置了总页数。这使我可以根据这个数字做出决定,即如果表格适合一页,我不想添加 1/1。
    • 太好了,很高兴我的回答对您有所帮助,感谢您的接受!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多