java - 如何防止段落和下表之间出现分页符

标签 java itext

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

我想打印出一个表格“标题”,然后是表格本身。发生的情况是,有时数据会导致表格标题出现在页面底部,而表格从下一页开始。

我想将表格标题和表格放在一起,即如果没有空间在标题之后开始表格,则将两者都移到下一页。

我目前通过创建一个段落对象来添加标题,然后在它之后添加一个 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...
:
:

如有任何指点,我们将不胜感激。

谢谢

最佳答案

由于您是 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(但代码中的行数会显着增加),将表标题添加为标题行(但如果表分布在不同页面上,则标题将重复),将标题和表格包装在“保持在一起”的另一个对象中(但这并不总是有效,具体取决于组合对象中存储的数据量)。

关于java - 如何防止段落和下表之间出现分页符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40251610/

相关文章:

单例作用域类方法中的 Java 线程安全

java - 存储十六进制值

itextsharp - iText 的 XmlWorker 无法识别表格单元格上的边框底部

java - 在 Itext 中使用 XMLWorkerHelper 时未设置图像宽度和高度

java - Joda DateTimeZone.getName(long instant) 返回无效名称

java - Android Java 从 webview 生成带有单独页眉和页脚的 PDF 文件

java - NetBeans 是否有任何 "collapse all"导航器 View 中打开目录的快捷方式?

java - 如何指定 iText PdfAnnotation 折线顶点?

java - 如何在PDF中查找单词的页码和字体大小?

android - 使用 itext 在 PdfPtable 中为 PdfPcell 添加虚线边框?