页眉与表重叠

时间:2016-02-17 06:39:44

标签: itext

在itext中,我的pdf中有一个表格。当表格填满页面时,条目会在下一页继续,但它与我的pdf页面标题重叠。我该如何避免?

1 个答案:

答案 0 :(得分:0)

请查看TableHeader示例。

在此示例中,我创建了一个包含“Hello World”内容的文档:

public void createPdf(String filename) throws IOException, DocumentException {
    TableHeader.HeaderTable event = new TableHeader.HeaderTable();
    // step 1
    Document document = new Document(PageSize.A4, 36, 36, 20 + event.getTableHeight(), 36);
    // step 2
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
    writer.setPageEvent(event);
    // step 3
    document.open();
    // step 4
    for (int i = 0; i < 50; i++)
        document.add(new Paragraph("Hello World!"));
    document.newPage();
    document.add(new Paragraph("Hello World!"));
    document.newPage();
    document.add(new Paragraph("Hello World!"));
    // step 5
    document.close();
}

如您所见,我还定义了一个TableHeader事件。我使用此event作为页面事件,但在定义Document时我也需要此事件。我使用以下值作为上边距:

20 + event.getTableHeight()

这是什么意思?我们来看看这个事件的实现:

public class HeaderTable extends PdfPageEventHelper {
    protected PdfPTable table;
    protected float tableHeight;
    public HeaderTable() {
        table = new PdfPTable(1);
        table.setTotalWidth(523);
        table.setLockedWidth(true);
        table.addCell("Header row 1");
        table.addCell("Header row 2");
        table.addCell("Header row 3");
        tableHeight = table.getTotalHeight();
    }

    public float getTableHeight() {
        return tableHeight;
    }

    public void onEndPage(PdfWriter writer, Document document) {
        table.writeSelectedRows(0, -1,
                document.left(),
                document.top() + ((document.topMargin() + tableHeight) / 2),
                writer.getDirectContent());
    }
}

创建活动时,会构建PdfPTable。我将此table存储为成员变量以及此表的高度:tableHeight

我在定义上边距时使用此tableHeight,以便我100%确定该表适合边距。我添加了另外20个用户单元,因为我不希望表格粘在页面的顶部边框上:

20 + event.getTableHeight()

当我在onEndPage()方法中添加表格时,我使用以下坐标:

x = document.left()
y = document.top() + ((document.topMargin() + tableHeight) / 2),

document.top()的值是页面顶部减去上边距的值。我添加了一些额外的空间,更具体地说是上边距和桌面高度之差除以2,加到了桌面高度:

tableHeight + ((document.topMargin() - tableHeight) / 2)

此公式可简化为:

((document.topMargin() + tableHeight) / 2)

正如你所看到的,所有这些都是简单的数学,这是你在小学教的数学。

生成的PDF如下所示:

enter image description here

这证明你的指控“它不起作用”是错误的。请理解,在人们详细解释如何做某事后,说“它不起作用”是不礼貌的。通过显示它确实起作用,阅读此内容的人可以将您的指控解释为谎言(这对您的业力不利)。