iText - Vermeiden Sie die letzte Zeile, um keine Tabellen auf der Seite auszuschneiden, die auf die nächste Seite aufgeteilt ist

Ich arbeite an itext 5 mit Java. Ich habe Seiten mit mehreren Tabellen mit dynamischen Zeilen. In einigen Fällen wird die letzte Tabellenzeile mit der folgenden Überschrift auf die nächste Seite aufgeteilt. ich benutzesetHeaderRows() undsetSkipFirstHeader() um die Fortsetzung der nächsten Seite zu verwalten. Die letzte Zeile hat genug Platz, um auf eine frühere Seite zu passen. Ich möchte die letzte Zeile auf derselben Seite anstatt auf der nächsten Seite einfügen.

Beispielsweise wird auf Seite 1 die letzte Zeile in die erste Zeile der nächsten Seite aufgeteilt. Stattdessen möchte ich diese Zeile in Seite 1 einfügen, also eine zusätzliche Seite mit allen Leerzeichen speichern.

Ich habe versucht mitsetExtendLastRow(), aber es funktioniert nicht. Weiß jemand, wie man dieses Problem behebt. Ich füge einen funktionierenden Beispielcode an.

public class ProposalItextSplitLastRow {
 public static void main(String[] args) {
    try {
        Document document = new Document();
        document.setPageSize(PageSize.LETTER);
        document.setMargins(16, 14, 14, 14);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:/SplitLastRow.pdf"));
        document.open();
        document.setPageSize(PageSize.LETTER);
        document.setMargins(16, 14, 42, 38);

        for (int m = 1; m < 20; m++) {

            int row = 0;
            PdfPTable table = new PdfPTable(1);
            table.setSpacingAfter(0);
            table.setSpacingBefore(0);
            table.setWidthPercentage(100);

            table.setHeaderRows(1);
            table.setSkipFirstHeader(true);
            add(table, "Header Row continued " + m, BaseColor.LIGHT_GRAY, row++);
            add(table, "Header Row normal " + m, BaseColor.LIGHT_GRAY, row++);

            add(table, "Text Row 1 ", BaseColor.WHITE, row++);
            add(table, "Text Row 2 ", BaseColor.WHITE, row++);
            add(table, "Text Row 3 ", BaseColor.WHITE, row++);

            addPadding(table);

            document.add(table);
        }

        document.close();
    } catch (Exception de) {
        de.printStackTrace();
    }
}

private static void add(PdfPTable table, String text, BaseColor color, int row) {
    PdfPCell pdfCellHeader = new PdfPCell();
    pdfCellHeader.setBackgroundColor(color);
    pdfCellHeader.addElement(new Paragraph(new Phrase(text)));
    table.addCell(pdfCellHeader);
}

private static void addPadding(PdfPTable table) {
    PdfPCell cell = new PdfPCell();
    cell.setFixedHeight(2f);
    cell.setBorder(Rectangle.NO_BORDER);
    cell.setColspan(table.getNumberOfColumns());
    table.addCell(cell);
}
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage