Itext nieuwe pagina tussen geïmporteerde pdfpagina's

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • corne78
  • Registratie: November 2021
  • Laatst online: 29-11-2021
Hoi allemaal,

ik gebruik VB.net 2022 en itext.
Ik heb een basis pdf template die ik inlees en waar tekst naartoe wordt geschreven en vervolgens geëxporteerd wordt. Op pagina 14 komen een aantal regels te staan, op het moment dat die regels meer dan 10 zijn moet naar de volgende pagina gegaan worden. Dat lukt prima, het probleem waar ik mee zit is dat De originele pagina uit de geïmporteerde PDF ook een plaats opschuift. En dat is niet de bedoeling. De geïmporteerde pagina 14 is namelijk volledig opgemaakt, met header E.d.

Onderstaand mijn code, zou super zijn als iemand me Zou kunnen vertellen hoe ik dit oplos.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Dim TotalPrice As Integer
For i = 0 To ListBoxPrijsTotaal.Items.Count - 1
    TotalPrice = TotalPrice + ListBoxPrijsTotaal.Items(i)
Next i


Dim oldFile As String = "_orig.pdf"
'Dim newFile As String

Dim Filepath As String = ("C:\users\" & Environment.UserName & "mycompany\test")

  
' Create reader
Dim reader As New PdfReader(oldFile)
Dim size As Rectangle = reader.GetPageSizeWithRotation(1)
Dim document As New Document(size)
TotalPagesOldFile = reader.NumberOfPages
Dim PagesNewFile = reader.NumberOfPages
TotalPagesNewFile = PagesNewFile


' Create the writer
Try
    Dim fs As New FileStream(SavedSLAPath, FileMode.Create, FileAccess.Write)
    Dim writer As PdfWriter = PdfWriter.GetInstance(document, fs)
    document.Open()

    Dim cb As PdfContentByte = writer.DirectContent
    'cb.BeginText()

    Dim TotalRows As Integer = ListBoxOmschrijving.Items.Count
    Dim SelectedRow As Integer = 0
    Dim Vertical As Integer = 645

    Do While PageCountNewFile <= TotalPagesNewFile

        Dim bf As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
        cb.SetColorFill(BaseColor.DARK_GRAY)
        cb.SetFontAndSize(bf, 9)

        NewImportedPage = writer.GetImportedPage(reader, PageCountNewFile)
        cb.BeginText()


        Select Case PageCountNewFile
            Case 1
                cb.ShowTextAligned(0, KlantNaam, 175, 525, 0)
            Case 2
                cb.ShowTextAligned(0, PuntEenPart1, 195, 522, 0)
                cb.ShowTextAligned(0, PUntEenPart2, 183, 510, 0)
            Case 12
                cb.ShowTextAligned(0, KlantNaam, 313, 220, 0)
                cb.ShowTextAligned(0, NaamContact, 313, 208, 0)

            Case importedpagenumber
                cb.ShowTextAligned(0, EmailContact, 202, 195, 0)
                cb.ShowTextAligned(0, NaamContact, 57, 195, 0)
                cb.ShowTextAligned(0, EmailContact2, 202, 145, 0)
                cb.ShowTextAligned(0, NaamContact2, 57, 145, 0)

                Do While Currentrow < TotalRows

                    cb.ShowTextAligned(0, ListBoxAantal.Items(Currentrow), 65, Vertical, 0)
                    cb.ShowTextAligned(0, ListBoxOmschrijving.Items(Currentrow), 95, Vertical, 0)
                    cb.ShowTextAligned(0, "€ " & ListBoxPrijs.Items(Currentrow), 260, Vertical, 0)
                    cb.ShowTextAligned(0, "€ " & ListBoxPrijsTotaal.Items(Currentrow), 350, Vertical, 0)
                    Vertical += -10
                    Currentrow += 1
                    CurrentRowNewpage += 1

                    If CurrentRowNewpage >= TotalRowsPerPage Then

                        cb.EndText()
                        document.NewPage() 'Er komt netjes in uw pagina bij maar de huidige pagina met opmaak is nu dus een plek opgeschoven. Op pagina 14 Staat nu dus het vervolg van de rows van pagina 15 (met opmaak)
                        cb.BeginText()
                        CurrentRowNewpage = 1
                        Dim bff As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
                        cb.SetColorFill(BaseColor.DARK_GRAY)
                        cb.SetFontAndSize(bf, 9)
                        Vertical += 50

                    End If
                Loop

                If ListBoxOmschrijving.Items.Count > 0 Then
                    Dim BigBlue As BaseFont = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
                    cb.SetColorFill(BaseColor.BLUE)
                    cb.SetFontAndSize(bf, 11)
                    cb.ShowTextAligned(0, "Totale prijs per maand is € " & TotalPrice, 95, Vertical - 20, 0)
                End If

        End Select
        PageCountNewFile += 1
        cb.EndText()
        cb.AddTemplate(NewImportedPage, 0, 0)
        document.NewPage()
    Loop

    document.Close()
    fs.Close()
    writer.Close()
    reader.Close()
    If ChkboxOpenenNaOpslaan.Checked = True Then Process.Start(SavedSLAPath)
Catch ex As SystemException
    Form1.LogMessage = ex.ToString
    Form1.WriteToLog()
    Exit Try
End Try

[ Voor 6% gewijzigd door RobIII op 29-11-2021 11:45 . Reden: Gebruik [code]-tags bij het posten van code a.u.b. ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • ValHallASW
  • Registratie: Februari 2003
  • Niet online
Je code is vrij chaotisch omdat je zowel "cb" als "document" gebruikt om naar je output te schrijven, maar fundamenteel is volgens mij het probleem dat je voor elke pagina éérst je toegevoegde tekst wegschrijft (je Select Case), en daarna pas het template (cb.AddTemplate, pagina 95).

Een tip voor dit soort issues: als je begint met je code flink te versimpelen tot alleen het cruciale deel overblijft:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
    NewImportedPage = writer.GetImportedPage(reader, PageCountNewFile)

    cb.BeginText()
    cb.ShowTextAligned(0, "test", 202, 195, 0)
    cb.EndText()

    document.NewPage()
    cb.BeginText()
    cb.ShowTextAligned(0, "test2", 202, 195, 0)
    cb.EndText()

    cb.AddTemplate(NewImportedPage, 0, 0)
    document.NewPage()


Dan is het opeens een stuk gemakkelijker om de flow te begrijpen en zodoende het probleem te spotten.

[ Voor 50% gewijzigd door ValHallASW op 03-12-2021 19:34 ]