java 将一个(标题-)段落和一个表格放在一页上?

gfttwv5a  于 2023-03-06  发布在  Java
关注(0)|答案(2)|浏览(136)

我正在生成一个PDF文档与iText 5.5.8在这个文档中有编号的段落,只包含一个标题段落和PdfPTable.

for (Item item : getItems()) {
        Paragraph title = new Paragraph();
        Chunk chunk = new Chunk(new Chunk(getIcon(item), 0, 0));
        addBookmark(item, chunk);
        title.add(chunk);
        Chunk chunk2 = new Chunk(getName(item), catFont_u);
        title.add(chunk2);
        title.setSpacingBefore(20);
        title.setSpacingAfter(14);
        PdfPTable table = createTable(item); // can be more than a page!
        table.setKeepTogether(true);
        Section subSection = chapter.addSection(title);
        subSection.add(table);
    }

现在,当表格大于页面其余部分的空间时,表格将被“移动”到下一页(setKeepTogether())。这很好。但是,我希望标题Paragraph始终与PdfPTable位于同一页上。因此,标题Paragraph也应该被移动到下一页。
我该如何实现这一点?
谢谢你,
卡雷尔

4szc88ey

4szc88ey1#

你可以创建一个一列的外部表格。然后添加你的段落(标题)。之后创建另一个表格innerTable,在这里你可以放置你的数据,然后添加内部表格到一个单元格,然后添加该单元格到外部表格。这样你的标题和表格将在一起,并使外部表格setsplitLate(false)。

n6lpvg4x

n6lpvg4x2#

iText 7.2.5、Java语言11:

static Table createKeepTogetherContainer( List<IBlockElement> aLines )
{
    Table result = new Table( 1 )
            .setWidth( UnitValue.createPercentValue( 100 ) )
            .setPadding( 0 )
            .setMargin( 0 )
            .setBorder( Border.NO_BORDER )
            .setKeepTogether( true );
    aLines.forEach( l -> result.addCell( new Cell()
                                         .add( l )
                                         .setPadding( 0 )
                                         .setMargin( 0 )
                                         .setBorder( Border.NO_BORDER )
                                         ) );
    return result;
}

相关问题