I create a .PDF with its header and a table, my problem is that when it shows it, it only gives me the page number and total page in the last two pages, for example, if I have a 5-page document, it only shows me page 4 of 5 on the last two pages, on page 4 and page 5 of 5 on page 5, but it doesn't show me anything on pages 1, 2 and 3. How can I solve this?
document.add(headerTable)
document.add(font18)
document.add(listaClientes)
val totalPages = pdfDocument.getNumberOfPages()
val handler = PageNumberHandler(pdfDocument, totalPages)
pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, handler)
document.add(
Paragraph(
"\nListado enviado el: ${
LocalDate.now().toString()
.let { reformatDate(it).replaceFirstChar(Char::titlecase) }
} "
).setTextAlignment(TextAlignment.CENTER)
)
document.close()
My PageNumberHandler
class PageNumberHandler(val pdfDocument: PdfDocument, val totalPages: Int) : IEventHandler {
override fun handleEvent(event: Event) {
val docEvent = event as PdfDocumentEvent
val pdfDoc = docEvent.document
val page = docEvent.page
val pageNumber = pdfDocument.getPageNumber(page)
val pageSize = page.pageSize
val x = pageSize.width - 50
val y = 20f // Ajusta este valor según la altura deseada del pie de página
val canvas = Canvas(page, pageSize)
val paragraph = Paragraph("Página $pageNumber de $totalPages")
.setTextAlignment(TextAlignment.RIGHT)
.setHorizontalAlignment(HorizontalAlignment.RIGHT)
canvas.showTextAligned(
paragraph,
x,
y,
pageNumber,
TextAlignment.RIGHT,
VerticalAlignment.BOTTOM,
0f
)
canvas.close()
}
An event handler can only handle events when it is registered with the event generating classes.
In your code you register your event listener only after you already added content to the document:
document.add(headerTable)
document.add(font18)
document.add(listaClientes)
val totalPages = pdfDocument.getNumberOfPages()
val handler = PageNumberHandler(pdfDocument, totalPages)
pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, handler)
Thus, your event listener can only work on pages that are not finished yet when you add your event handler.
To solve this, you obviously will have to add your handler much earlier.