如何防止段落与下表之间的分页符

时间:2016-10-25 23:59:10

标签: java itext

我是iText的新手,目前正在用java做一个小项目。

我想要打印一个表'title'然后打印表本身。发生的事情是,有时数据会导致表格标题显示在页面底部,而表格会显示在下一页面上。

我希望将表格标题和表格保持在一起,即如果标题后没有空间来启动表格,则将两者都移到下一页。

我目前通过创建段落对象添加标题,然后在其后添加PDFTable对象。我已经在下面列出了一些示例代码,基本上代表了我现在正在做的事情:

// Add a table title
Paragraph tableTitle = new Paragraph();
tableTitle .setAlignment(1);
tableTitle .add("This is my table title");
tableTitle .setSpacingAfter(12);
try {
    document.add(tableTitle );
} catch (DocumentException e) {
    throw new ReportingException("Couldn't add section title", e);
}

// Now add the table
PDFTable currentTable = new PdfPTable(3);
// add the headers and data to the table etc...
:
:

任何指针都会受到赞赏。

由于

2 个答案:

答案 0 :(得分:2)

由于您是iText的新手,最好从iText 7开始,而不是使用iText 5.我知道您使用的是iText 5,因为我看到您使用的是PdfPTable

iText 7与以前的版本不兼容。 iText 5从头开始重写,以便一劳永逸地解决许多已知的技术问题。由于您是iText的新手,这对您来说无关紧要:您没有任何需要从第5版迁移到7版的旧代码。

通过阅读iText 7: Building Blocks教程,您可以了解有关使用iText 7的更多信息。在Chapter 4中,您将发现setKeepWithNext()方法。在本教程中,此方法用于将章节的标题保留在该章的第一段的同一页面上:

BufferedReader br = new BufferedReader(new FileReader(SRC));
String line;
Div div = new Div();
while ((line = br.readLine()) != null) {
    document.add(new Paragraph(line)
        .setFont(bold).setFontSize(12)
        .setMarginBottom(0)
        .setKeepWithNext(true));
    div = new Div()
        .setFont(font).setFontSize(11)
        .setMarginBottom(18);
    while ((line = br.readLine()) != null) {
        div.add(
            new Paragraph(line)
                .setMarginBottom(0)
                .setFirstLineIndent(36)
        );
        if (line.isEmpty()) {
            document.add(div);
            break;
        }
    }
}
document.add(div);

如果您坚持使用iText 5,则可以使用解决方法,但这会使您的代码更加复杂。变通办法可能涉及使用ColumnText(但代码中的行数会显着增加),将表标题添加为标题行(但如果表分布在不同的页面上,则会重复标题),换行另一个“保持在一起”的对象中的标题和表格(但这并不总是有效,具体取决于组合对象中存储了多少数据)。

答案 1 :(得分:0)

您必须创建该章,但不必将其直接添加到文档中。这样就可以控制分页符。查看代码:

    document.add(chapter.getTitle());
    for(Element e : chapter) {
        document.add(e);
    }