Pracuję nad itext 5 przy użyciu java. Mam strony z wieloma tabelami z dynamicznymi wierszami. W niektórych przypadkach ostatni wiersz tabeli jest podzielony na następną stronę z następującym nagłówkiem. Używam setHeaderRows()
i setSkipFirstHeader()
do zarządzania kontynuacją następnej strony. Ostatni wiersz ma wystarczająco dużo miejsca, aby zmieścić się na wcześniejszej stronie. Chciałbym dopasować ten ostatni wiersz na tej samej stronie zamiast na następnej stronie.iText - unikaj ostatniego wiersza, aby nie ciąć tabel na stronie podzielonej na następną stronę
Na przykład na stronie 1 ostatni wiersz jest podzielony na pierwszy wiersz następnej strony. Zamiast tego chciałbym dopasować ten wiersz na stronie 1, więc zapisz jedną dodatkową stronę ze wszystkimi pustymi miejscami.
Próbowałem użyć setExtendLastRow()
, ale nie działa. Czy ktoś wie, jak naprawić ten problem. Załączam działający kod przykładowy.
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);
}
}
Udało się idealnie :) Dziękuję bardzo. Twoja pomoc jest bardzo doceniana. Przepraszam za pomylenie z moim pytaniem. Walczyłem o to z ostatnich kilku tygodni. Rozwiązało to mój problem polegający na unikaniu pierwszego wiersza do wycinania tabel na stronie podzielonej na http://stackoverflow.com/questions/16548001/itext-avoid-first-row-to-cut-tables-on-page-split. Tylko ciekawostki, aby wiedzieć, dlaczego twoje rozwiązanie nie działa z table.setWidthPercentage(). –
Możesz mieć pomysł, jak rozwiązać mój drugi problem, aby nie podzielić ostatniego wiersza na następną stronę (nie wdychać osieroconego ostatniego wiersza). Tak właśnie dzieje się z moim kodem. wiersz nagłówka normalny 16 Row Tekst 1 Row Tekst 2 ----- przerwa strona ---- wiersz nagłówka kontynuowano 16 Row Tekst 3 szukam rozwiązania nie mają podziału strony (split) i drukować wiersz 3 w pierwszej stronie, jak wiersz nagłówka normalny 16 Row Tekst 1 Row Tekst 2 Tekst Row 3 –
Dlaczego miałbym odpowiedzieć na kolejne pytanie, które jest zamieszczone na odpowiedź, która nie jest akceptowane ? Ponadto: dodatkowe pytania wymagają nowego pytania. –