У меня есть группа таблиц с динамическими строками. Существуют некоторые сценарии, в которых таблица разделяется между страницами. В некоторых сценариях только последняя строка разбивается на следующую страницу. Предположим, если таблица имеет 10 строк, строки с 1 по 9 отображаются на странице 1, а строка 10 отображается на стр. 2.iText - как найти последнюю строку разбивается на следующую страницу
Я ищу решение для разрыва страницы (document.newpage()) до чтобы переместить всю таблицу на следующую страницу в этом сценарии. Я попытался под кодом, и он работал для некоторых сценариев, но не для всех. Я хотел бы узнать, когда таблица последней строки будет разделяться, поэтому я могу добавить разрыв страницы, чтобы переместить всю таблицу на следующую страницу, чтобы избежать сирота сильной строки.
public class SplitItextLastRow {
final static private String BODY_FONT = FontFactory.getFont("Arial").getFamilyname();
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:/SplitItext.pdf"));
document.open();
document.setPageSize(PageSize.LETTER);
document.setMargins(16, 14, 14, 14);
int[] maxCountRows = new int[] { 3, 9, 2, 3, 7, 9, 2, 4, 5, 4, 9, 7, 6, 5, 4, 6, 8, 3 };
for (int k = 1; k <= maxCountRows.length; k++) {
PdfPTable table = new PdfPTable(1);
table.setSpacingAfter(0);
table.setSpacingBefore(0);
table.setTotalWidth(document.right() - document.left());
table.setLockedWidth(true);
table.setHeaderRows(1);
table.setSkipFirstHeader(true);
addHeader(table, "Header Row continued " + k, BaseColor.LIGHT_GRAY);
addHeader(table, "Header Row normal " + k, BaseColor.LIGHT_GRAY);
for (int i = 1; i < maxCountRows[k - 1]; i++) {
StringBuilder sb = new StringBuilder();
for (int p = 0; p < maxCountRows[k - 1] * 6; p++) {
sb.append("Text Row ");
}
add(table, sb.toString() + i, BaseColor.WHITE);
}
float verticalPosition = writer.getVerticalPosition(true);
System.out.println("------Table " + k);
if ((verticalPosition - table.getTotalHeight()) <= document.bottom()) {
System.out.println("........................................Last Row splitted");
}
document.add(table);
}
document.close();
} catch (Exception de) {
de.printStackTrace();
}
}
private static void addHeader(PdfPTable table, String text, BaseColor color) {
PdfPCell pdfCellHeader = new PdfPCell();
pdfCellHeader.setBackgroundColor(color);
pdfCellHeader.addElement(new Paragraph(new Phrase(text, FontFactory.getFont(BODY_FONT, 8f, BaseColor.BLUE))));
table.addCell(pdfCellHeader);
}
private static void add(PdfPTable table, String text, BaseColor color) {
PdfPCell pdfCellHeader = new PdfPCell();
pdfCellHeader.setBackgroundColor(color);
pdfCellHeader.addElement(new Paragraph(new Phrase(text, FontFactory.getFont(BODY_FONT, 5f, BaseColor.GREEN))));
table.addCell(pdfCellHeader);
}
}
Вы пытались добавить полную таблицу в другую таблицу с одним столбцом и одной строкой? Это должно дать вам ваш желаемый результат ... – Samoth