Ich arbeite an Itext 5 mit Java. Ich habe Seiten mit mehreren Tabellen mit dynamischen Zeilen. In einigen Fällen wird die letzte Zeile der Tabelle in die nächste Seite mit dem folgenden Header aufgeteilt. Ich verwende setHeaderRows()
und setSkipFirstHeader()
, 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 diese letzte Zeile auf der gleichen Seite statt auf der nächsten Seite einfügen.iText - vermeiden Sie die letzte Zeile, um Tabellen auf Seite nicht zu trennen, die zur nächsten Seite geteilt wird
Zum Beispiel 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 anpassen, also eine zusätzliche Seite mit allen Leerzeichen speichern.
Ich versuchte mit setExtendLastRow()
, aber es funktioniert nicht. Kann jemand dieses Problem beheben? 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);
}
}
Es hat perfekt funktioniert :) Vielen Dank. Ihre Hilfe wird gerne in Anspruch genommen. Entschuldigung für die Verwirrung mit meiner Frage. Ich habe es in den letzten Wochen gekämpft. Dies hat mein Problem mit der Vermeidung der ersten Zeile zum Schneiden von Tabellen auf Seitenaufteilung behoben, die unter http://stackoverflow.com/questions/16548001/itext-avoid-first-row-to-cut-tables-on-page-split veröffentlicht wurde. Nur Kuriositäten zu wissen, warum Ihre Lösung nicht mit table.setWidthPercentage() funktioniert. –
Sie haben vielleicht eine Idee, wie Sie mein anderes Problem lösen können, die letzte Zeile nicht in die nächste Seite zu splitten (nicht in die letzte Zeile der Witwenwaisen). Das passiert mit meinem Code. Kopfzeile normalen 16 Textzeile 1 Textzeile 2 ----- Seitenumbruch ---- Kopfzeile fortgesetzt 16 Text Zeile 3 ich nach einer Lösung suchen nicht einen Seitenumbruch zu haben (split) und Druck Zeile 3 in der ersten Seite, wie Kopfzeile normalen 16 Textzeile 1 Textzeile 2 Text Zeile 3 –
Warum sollte ich beantworten Sie eine Follow-up-Frage, die eine Antwort geschrieben wird, die nicht akzeptiert wird ? Außerdem: zusätzliche Fragen erfordern eine neue Frage. –