admin管理员组

文章数量:1405345

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()
}

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()
}
Share Improve this question edited Mar 8 at 14:19 desertnaut 60.5k32 gold badges155 silver badges182 bronze badges asked Mar 8 at 14:11 Rafel C.FRafel C.F 1911 silver badge11 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 2

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.

本文标签: kotlinPagination ItextStack Overflow