fasonzo Ответов: 1

Добавьте pag pagemax с событием itextsharp onendpage и VB.NET


У меня есть событие OnEndPage, я хотел бы добавить в поле моей таблицы Номер страницы и количество максимальных страниц, например, Pag 1 из 5, Pag 2 из 5 и т. д.,

Я создаю PDF-файл с переменными страницами, которые содержат заголовок и данные в табличном формате.

Как я могу заранее знать, сколько страниц будет иметь файл, который я создаю?
Тогда я должен его напечатать.
Должен ли я сначала создать его, чтобы узнать, сколько в нем страниц? и после регенерации он все еще знает, сколько всего страниц там есть?
или в этом есть какая-то функция?

Спасибо

Что я уже пробовал:

Public Class Form1

    'Dim xxx As New _events
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim Doc As Document = New Document(PageSize.A4, 20, 20, 215, 20)
        ' Dim Doc As Document = New Document(PageSize.A4, 36, 36, 36 + _ < height, [of], table > _, 36)' deve partire dopo l 'intestazione


        Dim ev As _events = New _events() ' la classe
        Dim wri As PdfWriter = PdfWriter.GetInstance(Doc, New FileStream("simple2.pdf", FileMode.Create))
        wri.PageEvent = ev


        Doc.Open()



        ''    ''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        ''    ''xxxxxxxxxxxxxxxxxxxxxxxxxx-                     CREAZIONE   GRIGLIA                 -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        ''    ''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


        TableGrid = New PdfPTable(5) ' diventata pubblica

        TableGrid.WidthPercentage = 100 ' Table size is set to 100% of the page
        TableGrid.HorizontalAlignment = 0 '0=left, 1=centre , 2 = right
        TableGrid.SpacingAfter = 10   ' mette uno spazio di 10 ,  dopo



        Dim TableGridWidths(4) As Single
        TableGridWidths(0) = 150 ' se li metto tutti e 3 uguali è come se faccio il 33%
        TableGridWidths(1) = 200
        TableGridWidths(2) = 500
        TableGridWidths(3) = 50
        TableGridWidths(4) = 100

        TableGrid.SetWidths(TableGridWidths) ' Set the column widths on table creation. Unlike HTML cells cannot be sized.


        Try
            For i = 0 To 100


                '2° riga verde
                Dim GrillCell1 As New PdfPCell(New Phrase("Pos.Mag" & i, fntNormal12))
                'CellOne.Rotation = -90 ' inclina il testo
                GrillCell1.HorizontalAlignment = 1 '0=left, 1=centre , 2 = right
                TableGrid.AddCell(GrillCell1)

                Dim GrillCell2 As New PdfPCell(New Phrase("PN" & i, fntNormal12))
                'CellTwo.Border = 0
                GrillCell2.HorizontalAlignment = 1 '0=left, 1=centre , 2 = right
                TableGrid.AddCell(GrillCell2)

                Dim GrillCell3 As New PdfPCell(New Phrase("Descrizione" & i, fntNormal12))
                GrillCell3.HorizontalAlignment = 1 '0=left, 1=centre , 2 = right
                TableGrid.AddCell(GrillCell3)

                Dim GrillCell4 As New PdfPCell(New Phrase(i, fntNormal12))
                GrillCell4.HorizontalAlignment = 1 '0=left, 1=centre , 2 = right
                TableGrid.AddCell(GrillCell4)

                Dim GrillCell5 As New PdfPCell(New Phrase(i, fntNormal12))
                GrillCell5.HorizontalAlignment = 1 '0=left, 1=centre , 2 = right
                TableGrid.AddCell(GrillCell5)


            Next i

            ' quetsa volta aggiungo direttamente sul documento  .doc, mentre nella classe aggiungo prima una cella e poi tutta la cela dentro la tabella esterna
            Doc.Add(TableGrid)


        Catch ex As Exception
            MsgBox(ex.ToString)

            Doc.Close()

        End Try



        'For i = 0 To 1000
        '    Doc.Add(New Phrase("TESTING\n"))
        'Next i


        Doc.Close()

        Process.Start("simple2.pdf")




    End Sub





В событии OnEndPage я создаю заголовок на каждой странице

1 Ответов

Рейтинг:
1

Maciej Los

Взгляните сюда: iText 5-legacy : как получить текущее количество страниц?[^]

Цитата:
Документ создается в 5 этапов:

1. Создайте документ. Этот документ ничего не знает о представлении документа, только о его содержании.
2. Создайте писателя. Вы создаете PdfWriter, который будет переводить содержимое в презентацию, а точнее в PDF-документ с одной или несколькими страницами.
3. Откройте документ.
4. Добавьте контент.
5. Закройте документ.

Вы задаете объекту документа текущий номер страницы, но документ не знает о его представлении. Он даже не знает, что создается PDF-файл.

Вы должны спросить писателя, который отвечает за создание PDF-файла, сколько страниц уже было создано; writer.PageNumber вернет это число.


Вывод: Да, вы должны сначала создать полный pdf-документ, чтобы иметь возможность добавить количество страниц.