iText: evite la última fila para no cortar tablas en la página dividida en la página siguiente

Estoy trabajando en itext 5 usando java. Tengo páginas con tablas múltiples con filas dinámicas. En algunos casos, la última fila de la tabla se divide en la página siguiente con el siguiente encabezado. estoy usandosetHeaderRows() ysetSkipFirstHeader() para gestionar la continuación de la página siguiente. La última fila tiene espacio suficiente para caber en la página anterior. Me gustaría colocar esa última fila en la misma página en lugar de en la página siguiente.

Por ejemplo, en la página 1, la última fila se divide en la primera fila de la página siguiente. En su lugar, me gustaría encajar esa fila en la página 1, así que guarde una página adicional con todos los espacios en blanco.

Traté de usarsetExtendLastRow(), pero no funciona. Alguien sabe cómo arreglar este problema. Estoy adjuntando un código de ejemplo de trabajo.

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);
}
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta