Я использую itext7.
У меня есть таблица с заголовком и несколько обычных строк. Я также поместил заголовок страницы из pageNumber> 1. Поэтому, когда таблица разбивается на следующей странице, у меня появляется заголовок таблицы, который перекрывает заголовок страницы.
Моя цель - поместить заголовок разделенной таблицы чуть ниже заголовка страницы, чтобы больше не было перекрытия.
Для этого я хочу поместить табличное событие и попытаться изменить верхнюю часть поля таблицы, когда происходит разделение.
В случае с itext5 существовал установщик setTableEvent, который можно установить для PdfPTable с использованием PdfPTableEventForwarder для создания события.
Как мне достичь этой цели с помощью itext7?
Мой код такой:
Я добавил следующий обработчик для события END_PAGE
PdfDocument pdf = new PdfDocument(writer);
pdf.addEventHandler(PdfDocumentEvent.END_PAGE, new MyHeaderEventHandler());
Фрагмент кода класса MyHeaderEventHandler:
public void handleEvent (Event event) {
// код здесь
if(pageNumber > 1)
{
Table pageHeaderTable = new Table(new float[]{1.5f, 1.3f, 1.5f, 2.3f, 2.3f, 2.3f, 2f, 2.6f});
pageHeaderTable.setMarginTop(12).setWidth(523).setMarginLeft(36);
pageHeaderTable.setFixedLayout();
//some code to fill pageHeaderTable cells(1 row with 8 cells) with string values
canvas.add(pageHeaderTable);
}
canvas.close();
pdfCanvas.release();
}
// фрагмент кода для моей invoiceElementTable
Table invoiceElementTable = new Table(new float[]{1.5f, 1.3f, 1.5f, 2.3f, 2.3f, 2.3f, 2f, 2.6f});
invoiceElementTable.setFixedLayout();
invoiceElementTable.setWidth(UnitValue.createPercentValue(100));
invoiceElementTable.addHeaderCell(new Cell(1,8).add(new Paragraph("invoiceElementTable Header")));
I have a list of objects to fill the cells:
eltList.stream().forEach(elt-> {
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem0)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem1)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem2)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem3)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem4)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem5)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem6)));
invoiceElementTable.addCell(new Cell().add(new Paragraph(elt.getItem7)));
});
Проблема заключается в том, что когда invoiceElementTable разделяется на следующую страницу, строка его заголовка («invoiceElementTable Header») перекрывает уникальную строку pageHeaderTable.
Я хочу изменить положение invoiceElementTable, когда оно разделяется на следующую страницу, чтобы избежать наложения