easytable не поддерживает повторяющиеся верхние и нижние колонтитулы таблицы. Еще нет Я должен сказать, потому что эта функция на самом деле проста в реализации.
Однако трудно реализовать поверх easytable, потому что эта библиотека (как и многие другие) страдает от чрезмерного сокрытия данных: многие интересные переменные-члены и методы private
, что расширяет классы не является жизнеспособным вариантом.
Но что вы можете сделать, это обработать строки заголовка как отдельную таблицу, которую вы рисуете снова и снова! Недостатком является двойственность настроек.
В случае кода теста TwoPagesTableTest
, на который вы ссылались, его можно изменить следующим образом:
final Table.TableBuilder tableHeaderBuilder = Table.builder()
.addColumnOfWidth(200)
.addColumnOfWidth(200);
CellText dummyHeaderCell = CellText.builder()
.text("Header dummy")
.backgroundColor(Color.BLUE)
.textColor(Color.WHITE)
.borderWidth(1F)
.build();
tableHeaderBuilder.addRow(
Row.builder()
.add(dummyHeaderCell)
.add(dummyHeaderCell)
.build());
Table tableHeader = tableHeaderBuilder.build();
final Table.TableBuilder tableBuilder = Table.builder()
.addColumnOfWidth(200)
.addColumnOfWidth(200);
CellText dummyCell = CellText.builder()
.text("dummy")
.borderWidth(1F)
.build();
for (int i = 0; i < 50; i++) {
tableBuilder.addRow(
Row.builder()
.add(dummyCell)
.add(dummyCell)
.build());
}
TableDrawer drawer = TableDrawer.builder()
.table(tableBuilder.build())
.startX(50)
.endY(50F) // note: if not set, table is drawn over the end of the page
.build();
final PDDocument document = new PDDocument();
float startY = 100F;
do {
TableDrawer headerDrawer = TableDrawer.builder()
.table(tableHeader)
.startX(50)
.build();
PDPage page = new PDPage(PDRectangle.A4);
document.addPage(page);
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
headerDrawer.startY(startY);
headerDrawer.contentStream(contentStream).draw();
drawer.startY(startY - tableHeader.getHeight());
drawer.contentStream(contentStream).draw();
}
startY = page.getMediaBox().getHeight() - 50;
} while (!drawer.isFinished());
document.save("twoPageTable-repeatingHeader.pdf");
document.close();
( RepeatingTableHeaders test createTwoPageTableRepeatingHeader
)
Как видите, код сначала создает отдельный Table tableHeader
, содержащий только строку заголовка. Затем эта таблица добавляется первой на каждой странице, а затем добавляется часть таблицы строк тела.
Результат: заголовки таблиц на каждой странице ...
![screen shot](https://i.stack.imgur.com/Pl2ih.png)
Слово предупреждения: Это подтверждение концепции, я проверял только код генерации таблицы из TwoPagesTableTest
. Для производственного кода вы должны применить дальнейшие тесты.