如何使用iTextSharp VB.net在PDF中添加页脚?

时间:2017-12-12 09:54:30

标签: vb.net visual-studio itext pdf-generation

我有一段代码可以生成我的PDF。 我想弄清楚如何在每个页面添加页脚,但我不知道如何。我在C#中看到了很多例子,但我似乎无法找到如何使用VB.net准确添加页脚(C#技能不是很好)。

我认为正确的方法是使用OnEndPage功能,但我不知道如何在我的代码中添加它。 我是新手,所以任何帮助都会很棒。

以下代码就是我现在使用的代码。

Private Sub GeneratePDF()


    Dim pdfDoc As New Document()
    Dim pdfWrite As PdfWriter = PdfWriter.GetInstance(pdfDoc, New FileStream("\\testserver\verkoop\offerte v2\Offerte " & offertenummer2 & "-" & offertenummer & " " & TextBox2.Text & ".pdf", FileMode.Create))

    Dim FontColour As BaseColor = New BaseColor(35, 31, 32)
    Dim Calibri8 As Font = FontFactory.GetFont("Calibri", 10, FontColour)

    Dim img As Image = Image.GetInstance("Resources\Offerte-NL.png")

    pdfDoc.Open()

    'witte lijn

    Dim whiteline As New PdfPCell(New Phrase(" "))
    whiteline.Colspan = 2
    whiteline.HorizontalAlignment = 0
    whiteline.Border = Rectangle.NO_BORDER

    'foto inladen
    If RadioButton5.Checked = True Then

        img = Image.GetInstance("Resources\Offerte-NL.png")
        img.ScalePercent(18.0F, 18.0F)
        img.Alignment = 0
        pdfDoc.Add(img)

    ElseIf RadioButton4.Checked = True Then

        img = Image.GetInstance("Resources\Offerte-BE.png")
        img.ScalePercent(18.0F, 18.0F)
        img.Alignment = 0
        pdfDoc.Add(img)

    End If


    'Eerste table in PDF voor klantgegevens

    Dim klanttable As New PdfPTable(2)
    klanttable.TotalWidth = 350.0F
    klanttable.LockedWidth = True
    klanttable.HorizontalAlignment = 0
    'klanttable.DefaultCell.Border = Rectangle.NO_BORDER

    Dim sglTblHdWidths(1) As Single
    sglTblHdWidths(0) = 120
    sglTblHdWidths(1) = 230
    klanttable.SetWidths(sglTblHdWidths)

    Dim kollommatenproduct(5) As Single
    kollommatenproduct(0) = 45
    kollommatenproduct(1) = 45
    kollommatenproduct(2) = 200
    kollommatenproduct(3) = 65
    kollommatenproduct(4) = 60
    kollommatenproduct(5) = 55


    klanttable.SetWidths(sglTblHdWidths)




    Dim cell As New PdfPCell(New Phrase("Debiteur gegevens"))

    cell.Colspan = 2
    cell.HorizontalAlignment = 0
    cell.Border = Rectangle.NO_BORDER

    Dim debnr As String = TextBox1.Text
    Dim bn As String = TextBox2.Text
    Dim adr As String = TextBox3.Text
    Dim pcwp As String = TextBox4.Text
    Dim cp As String = TextBox5.Text
    Dim km As String = TextBox6.Text

    klanttable.AddCell(cell)
    klanttable.AddCell(whiteline)
    klanttable.AddCell(New Phrase("Debiteur nr.: ", Calibri8))
    klanttable.AddCell(New Phrase(debnr, Calibri8))
    klanttable.AddCell(New Phrase("(Bedrijfs)naam:", Calibri8))
    klanttable.AddCell(New Phrase(bn, Calibri8))
    klanttable.AddCell(New Phrase("Adres:", Calibri8))
    klanttable.AddCell(New Phrase(adr, Calibri8))
    klanttable.AddCell(New Phrase("Postcode & woonplaats:", Calibri8))
    klanttable.AddCell(New Phrase(pcwp, Calibri8))
    klanttable.AddCell(New Phrase("Contactpersoon", Calibri8))
    klanttable.AddCell(New Phrase(cp, Calibri8))
    klanttable.AddCell(New Phrase("Kenmerk:", Calibri8))
    klanttable.AddCell(New Phrase(km, Calibri8))
    klanttable.SpacingBefore = 50.0F
    klanttable.SpacingAfter = 100.0F


    pdfDoc.Add(klanttable)

    'Offerte nummer tabel

    Dim offerteinfotable As New PdfPTable(2)
    offerteinfotable.TotalWidth = 350.0F
    offerteinfotable.LockedWidth = True
    offerteinfotable.HorizontalAlignment = 0
    'offerteinfotable.DefaultCell.Border = Rectangle.NO_BORDER

    offerteinfotable.SetWidths(sglTblHdWidths)


    Dim cell2 As New PdfPCell(New Phrase("Offerte informatie"))
    cell2.Colspan = 2
    cell2.HorizontalAlignment = 0
    cell2.Border = Rectangle.NO_BORDER

    offerteinfotable.AddCell(cell2)
    offerteinfotable.AddCell(whiteline)
    offerteinfotable.AddCell(New Phrase("Offertenummer:", Calibri8))
    offerteinfotable.AddCell(New Phrase(offertenummer2.ToString + "-" + offertenummer.ToString, Calibri8))
    offerteinfotable.AddCell(New Phrase("Datum:", Calibri8))
    offerteinfotable.AddCell(New Phrase(DateTime.Now.Date.ToShortDateString, Calibri8))
    offerteinfotable.AddCell(New Phrase("Contactpersoon:", Calibri8))
    offerteinfotable.AddCell(New Phrase(Login.TextBox3.Text.ToString, Calibri8))
    offerteinfotable.SpacingAfter = 100.0F

    pdfDoc.Add(offerteinfotable)


    'Extra informatie offerte

    Dim offerteextrainfotable As New PdfPTable(2)
    offerteextrainfotable.TotalWidth = 350.0F
    offerteextrainfotable.LockedWidth = True
    offerteextrainfotable.HorizontalAlignment = 0
    'offerteinfotable.DefaultCell.Border = Rectangle.NO_BORDER

    offerteextrainfotable.SetWidths(sglTblHdWidths)


    Dim cell3 As New PdfPCell(New Phrase("Leverings informatie"))
    cell3.Colspan = 2
    cell3.HorizontalAlignment = 0
    cell3.Border = Rectangle.NO_BORDER

    offerteextrainfotable.AddCell(cell3)
    offerteextrainfotable.AddCell(whiteline)
    offerteextrainfotable.AddCell(New Phrase("Betalingscondities:", Calibri8))
    offerteextrainfotable.AddCell(New Phrase(ComboBox3.Text.ToString, Calibri8))
    offerteextrainfotable.AddCell(New Phrase("Levertermijn:", Calibri8))
    offerteextrainfotable.AddCell(New Phrase(ComboBox4.Text.ToString, Calibri8))
    offerteextrainfotable.AddCell(New Phrase("Extra informatie:", Calibri8))
    offerteextrainfotable.AddCell(New Phrase(TextBox7.Text.ToString, Calibri8))

    pdfDoc.Add(offerteextrainfotable)


    'pagina 2
    pdfDoc.NewPage()

    'Header invoegen
    pdfDoc.Add(img)

    'producten invoegen

    Dim productentable As New PdfPTable(6)
    productentable.TotalWidth = 530.0F
    productentable.LockedWidth = True
    productentable.HorizontalAlignment = 0
    productentable.DefaultCell.PaddingBottom = 5
    productentable.DefaultCell.PaddingTop = 5


    productentable.SetWidths(kollommatenproduct)

    productentable.AddCell(New Phrase("Aantal", Calibri8))
    productentable.AddCell(New Phrase("Art. Nr.", Calibri8))
    productentable.AddCell(New Phrase("Omschrijving", Calibri8))
    productentable.AddCell(New Phrase("Capaciteit", Calibri8))
    productentable.AddCell(New Phrase("Prijs per stuk", Calibri8))
    productentable.AddCell(New Phrase("Prijs totaal", Calibri8))

    Dim totaalincbtw As Decimal = 0.00
    Dim totaalexbtw As Decimal = 0.00


    For Each Row In DataGridView1.Rows

        If Not Row.IsNewRow Then

            Dim aantal As String = Row.Cells(0).Value.ToString
            Dim artikelnummer As String = Row.Cells(1).Value.ToString
            Dim omschrijving As String = Row.Cells(5).Value.ToString
            Dim capaciteit As String = Row.Cells(2).Value.ToString + Row.Cells(3).Value.ToString
            Dim prijsperstukinc As Decimal = Row.Cells(4).Value.ToString
            Dim prijsperstuk As Decimal = Math.Round(prijsperstukinc / 1.21, 2)
            Dim tot1 As Decimal = Row.Cells(0).Value.ToString
            Dim tot2 As Decimal = Row.Cells(4).Value.ToString
            Dim totaalprijsex As Decimal = Math.Round(tot1 * tot2 / 1.21, 2)
            Dim totaalprijsinc As Decimal = Math.Round(tot1 * tot2, 2)

            totaalincbtw = totaalincbtw + totaalprijsinc
            totaalexbtw = totaalexbtw + totaalprijsex

            productentable.AddCell(New Phrase(aantal, Calibri8))
            productentable.AddCell(New Phrase(artikelnummer, Calibri8))
            productentable.AddCell(New Phrase(omschrijving, Calibri8))
            productentable.AddCell(New Phrase(capaciteit, Calibri8))
            productentable.AddCell(New Phrase("€ " + prijsperstuk.ToString, Calibri8))
            productentable.AddCell(New Phrase("€ " + totaalprijsex.ToString, Calibri8))



        End If

    Next


    'totaal bedragen toevoegen

    Dim btw As Decimal = totaalincbtw - totaalexbtw

    Dim blankcell As New PdfPCell(New Phrase(" "))
    blankcell.Colspan = 3
    blankcell.HorizontalAlignment = 0
    blankcell.Border = Rectangle.NO_BORDER

    Dim subtotaalcell As New PdfPCell(New Phrase("Subtotaal:", Calibri8))
    subtotaalcell.UseVariableBorders = True
    subtotaalcell.Border = Rectangle.BOTTOM_BORDER + Rectangle.TOP_BORDER + Rectangle.LEFT_BORDER


    Dim btw21cell As New PdfPCell(New Phrase("BTW 21%", Calibri8))
    btw21cell.UseVariableBorders = True
    btw21cell.Border = Rectangle.BOTTOM_BORDER + Rectangle.TOP_BORDER + Rectangle.LEFT_BORDER



    Dim totaalbedragcell As New PdfPCell(New Phrase("Totaalbedrag:", Calibri8))
    totaalbedragcell.UseVariableBorders = True
    totaalbedragcell.Border = Rectangle.BOTTOM_BORDER + Rectangle.TOP_BORDER + Rectangle.LEFT_BORDER



    Dim tussencel As New PdfPCell(New Phrase(" ", Calibri8))
    tussencel.UseVariableBorders = True
    tussencel.Border = Rectangle.BOTTOM_BORDER + Rectangle.TOP_BORDER
    tussencel.PaddingBottom = 5



    Dim subtotaalcell2 As New PdfPCell(New Phrase("€ " + totaalexbtw.ToString, Calibri8))
    subtotaalcell2.UseVariableBorders = True
    subtotaalcell2.Border = Rectangle.BOTTOM_BORDER + Rectangle.RIGHT_BORDER + Rectangle.TOP_BORDER



    Dim btw21cell2 As New PdfPCell(New Phrase("€ " + btw.ToString, Calibri8))
    btw21cell2.UseVariableBorders = True
    btw21cell2.Border = Rectangle.BOTTOM_BORDER + Rectangle.RIGHT_BORDER + Rectangle.TOP_BORDER



    Dim totaalbedragcell2 As New PdfPCell(New Phrase("€ " + totaalincbtw.ToString, Calibri8))
    totaalbedragcell2.UseVariableBorders = True
    totaalbedragcell2.Border = Rectangle.BOTTOM_BORDER + Rectangle.RIGHT_BORDER + Rectangle.TOP_BORDER



    productentable.AddCell(blankcell)
    productentable.AddCell(blankcell)

    productentable.AddCell(blankcell)
    productentable.AddCell(subtotaalcell)
    productentable.AddCell(tussencel)
    productentable.AddCell(subtotaalcell2)


    productentable.AddCell(blankcell)
    productentable.AddCell(btw21cell)
    productentable.AddCell(tussencel)
    productentable.AddCell(btw21cell2)

    productentable.AddCell(blankcell)
    productentable.AddCell(totaalbedragcell)
    productentable.AddCell(tussencel)
    productentable.AddCell(totaalbedragcell2)



    pdfDoc.Add(productentable)


    pdfDoc.Close()


End Sub

编辑:

这是答案:)! 在我的代码中添加了下一段代码。

Public Class itsEvents
    Inherits PdfPageEventHelper

    Public Overrides Sub OnEndPage(ByVal writer As iTextSharp.text.pdf.PdfWriter, ByVal document As iTextSharp.text.Document)

        Dim FontColour As BaseColor = New BaseColor(0, 0, 0)
        Dim Calibri6 As Font = FontFactory.GetFont("Calibri", 6, FontColour)



        Dim algemenevoorwaarden As New PdfPTable(1)
        algemenevoorwaarden.HorizontalAlignment = 1

        Dim cell3 As New PdfPCell(New Phrase(" "))
        cell3.HorizontalAlignment = 1
        cell3.Border = Rectangle.NO_BORDER
        Dim cell4 As New PdfPCell(New Phrase("Textline 1", Calibri6))
        cell4.HorizontalAlignment = 1
        cell4.Border = Rectangle.NO_BORDER
        Dim cell5 As New PdfPCell(New Phrase("Textline 2", Calibri6))
        cell5.HorizontalAlignment = 1
        cell5.Border = Rectangle.NO_BORDER
        Dim cell6 As New PdfPCell(New Phrase("Textline 3", Calibri6))
        cell6.HorizontalAlignment = 1
        cell6.Border = Rectangle.NO_BORDER

        algemenevoorwaarden.AddCell(cell3)
        algemenevoorwaarden.AddCell(cell4)
        algemenevoorwaarden.AddCell(cell5)
        algemenevoorwaarden.AddCell(cell6)

        document.Add(algemenevoorwaarden)




    End Sub

End Class

1 个答案:

答案 0 :(得分:0)

这个答案,只是将其添加到代码中,现在触发了页面事件。

Public Class itsEvents
Inherits PdfPageEventHelper

Public Overrides Sub OnEndPage(ByVal writer As iTextSharp.text.pdf.PdfWriter, ByVal document As iTextSharp.text.Document)

    Dim FontColour As BaseColor = New BaseColor(0, 0, 0)
    Dim Calibri6 As Font = FontFactory.GetFont("Calibri", 6, FontColour)



    Dim algemenevoorwaarden As New PdfPTable(1)
    algemenevoorwaarden.HorizontalAlignment = 1

    Dim cell3 As New PdfPCell(New Phrase(" "))
    cell3.HorizontalAlignment = 1
    cell3.Border = Rectangle.NO_BORDER
    Dim cell4 As New PdfPCell(New Phrase("Textline 1", Calibri6))
    cell4.HorizontalAlignment = 1
    cell4.Border = Rectangle.NO_BORDER
    Dim cell5 As New PdfPCell(New Phrase("Textline 2", Calibri6))
    cell5.HorizontalAlignment = 1
    cell5.Border = Rectangle.NO_BORDER
    Dim cell6 As New PdfPCell(New Phrase("Textline 3", Calibri6))
    cell6.HorizontalAlignment = 1
    cell6.Border = Rectangle.NO_BORDER

    algemenevoorwaarden.AddCell(cell3)
    algemenevoorwaarden.AddCell(cell4)
    algemenevoorwaarden.AddCell(cell5)
    algemenevoorwaarden.AddCell(cell6)

    document.Add(algemenevoorwaarden)




End Sub

End Class