首页 文章

iText表 - 如何在一个页面上保留多行单元格?

提问于
浏览
2

我正在iText中创建一个列出日期事件的表 . 如果日期有多个事件,我将日期单元格的rowspan属性设置为事件数 . 我目前正在为每个事件使用一行,因为我想显示事件的其他信息,并希望保持一致 . 基本上我的表格看起来像这样:

Date   | Event     | Details
--------+-----------+---------------
 date 1 | event 1   | details 1
--------+-----------+---------------
 date 2 | event 2 1 | more 
        |           | details 2 1
        +-----------+---------------
        | event 2 2 | details 2 2
--------+-----------+---------------

包含 date 2 的单元格的行数为2 .

我在循环中使用 ColumnText.go() 添加表 .

如果我将表写入文档并且 event 2 1 只剩下足够的空间,则 event 2 2 将转到新页面 . 如何在添加 date 2 之前强制新页面?

使用 PdfPTable.setSplitLate(true) 似乎不会影响多行单元格 . 也没有将 date 2 单元的固定高度设置为两行的组合高度 .

  • 一个解决方案是使用第2列和第3列的嵌套表(并将第2列和第3列视为一列)

  • 另一个使用't work correctly in the version of iText I'的解决方案是使用 PdfPTable.writeSelectedRows() 并仅写入适合页面的(组合)行 . 问题是,通过这种方式忽略行 Span 并且 Date 单元格看起来像tey只跨越一行 .

还有其他方法吗?

1 回答

  • 1

    您可以为每一行创建一个表,并使用 PdfPTable.setKeepTogether(true) ,甚至可以在iText 2.1.7中使用,但我不建议保留该版本 . 下面是一个示例,其中 outputFile 是正在创建PDF文件的File类型变量 .

    Document document = new Document(new Rectangle(620, 150));
    PdfWriter.getInstance(document, new FileOutputStream(outputFile));
    
    document.open();
    
    PdfPTable headerRow = new PdfPTable(3);
    headerRow.setKeepTogether(true);
    headerRow.addCell("Date");
    headerRow.addCell("Event");
    headerRow.addCell("Details");
    
    PdfPTable firstRow = new PdfPTable(3);
    firstRow.setKeepTogether(true);
    firstRow.addCell("date 1");
    firstRow.addCell("event 2 1");
    firstRow.addCell("more\ndetails 2 1");
    
    PdfPTable secondRow = new PdfPTable(3);
    secondRow.setKeepTogether(true);
    PdfPCell cell = new PdfPCell(new Phrase("date 2"));
    cell.setRowspan(2);
    secondRow.addCell(cell);
    secondRow.addCell("event 2 1");
    secondRow.addCell("more\ndetails 2 1");
    secondRow.addCell("event 2 2");
    secondRow.addCell("details 2 2");
    
    document.add(headerRow);
    document.add(firstRow);
    document.add(secondRow);
    
    document.close();
    

    老实说,我认为嵌套表是更好的主意 .

相关问题