I am trying to create a PDF with a header and footer. Both header and foot are images. Since my pdf creates a random amount of pages I need to automaticly add it to every page. I know I need to use some sort of eventhandler. Unfortunately I can't find any examples in the vb.net language, I only can find java/C# examples and I am really bad at reading/converting these language to vb.net. I am not a expert yet at programming.
Can anyone point me in the right direction.
Edit4: Removed random stuff no longer need to answer my question.
This piece of code below is all I got on creating the PDF itself.
Imports System.IO
Imports MySql.Data.MySqlClient
Imports iText.Kernel
Imports iText.Kernel.Pdf
Imports iText.Kernel.Font
Imports iText.Kernel.Font.PdfFont
Imports iText.Kernel.Font.PdfFontFactory
Imports iText.IO.Image
Imports iText.IO.Image.ImageData
Imports iText.IO.Image.ImageDataFactory
Imports iText.Layout.Element.Image
Imports iText.Layout
Imports iText.Layout.Element
Imports iText.Layout.Element.Table
Imports iText.Kernel.Events.Event
Imports iText.Kernel.Events.PdfDocumentEvent
Imports iText.Kernel.Geom.PageSize
Imports iText.Kernel.Geom.Rectangle
Imports iText.Kernel.Pdf.PdfDocument
Imports iText.Kernel.Pdf.PdfNumber
Imports iText.Kernel.Pdf.PdfWriter
Imports iText.Kernel.Pdf.Canvas.PdfCanvas
Imports iText.Kernel.Pdf.Canvas.PdfCanvasConstants
Imports iText.Kernel.Pdf.Xobject.PdfFormXObject
Imports iText.Layout.Canvas
Imports iText.Layout.Document
Imports iText.Layout.Style
Imports iText.Layout.Layout.LayoutArea
Imports iText.Layout.Layout.LayoutContext
Imports iText.Layout.Layout.LayoutResult
Imports iText.Layout.Renderer.CellRenderer
Imports iText.Layout.Renderer.DrawContext
Imports iText.Layout.Renderer.TableRenderer
Imports iText.Signatures.PdfSignatureAppearance
Public Sub NewiText7PdfCreation()
'Dim dest As String = "\\test\verkoop\offerte v2\Offerte " & offertenummer2 & "-" & offertenummer & " " & TextBox2.Text & ".pdf"
Dim dest As String = "iText7Test.pdf"
Dim writer As PdfWriter = New PdfWriter(dest)
Dim pdf As PdfDocument = New PdfDocument(writer)
Dim doc As Document = New Document(pdf)
Dim font As PdfFont = PdfFontFactory.CreateFont("C:\Windows\Fonts\calibri.ttf")
'header
Dim headerlocation As String = "Resources\Offerte-NL.png"
Dim headerimage2 As Image = New Image(ImageDataFactory.Create(headerlocation))
doc.Add(headerimage2)
'klant gegevens
doc.Add(New Paragraph("Debiteur gegevens").SetFont(font))
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
Dim klanttable As New Table(2)
klanttable.SetMaxWidth(350)
klanttable.SetHorizontalAlignment(0)
klanttable.SetFont(font)
klanttable.SetFontSize(8)
klanttable.SetWidth(350)
klanttable.SetMinWidth(120)
klanttable.AddCell("Debiteur nr.: ")
klanttable.AddCell(debnr)
klanttable.AddCell("(Bedrijfs)naam:")
klanttable.AddCell(bn)
klanttable.AddCell("Adres:")
klanttable.AddCell(adr)
klanttable.AddCell("Postcode & woonplaats:")
klanttable.AddCell(pcwp)
klanttable.AddCell("Contactpersoon:")
klanttable.AddCell(cp)
klanttable.AddCell("Kenmerk:")
klanttable.AddCell(km)
Dim cell As New Cell
klanttable.SetMarginTop(10)
klanttable.SetMarginBottom(10)
doc.Add(klanttable)
doc.Close()
End Sub
Edit:
Found a nice tutorial on the iText website.
I just don't quite get how to insert that piece of code into my own piece of code. I think I need to create a new class that handles the event. But how do I need to call this event.
I just add the follow line to my code:
Implements IEventHandler
And this new sub.
Public Sub HandleEvent([event] As [Event]) Implements IEventHandler.HandleEvent
Throw New NotImplementedException()
End Sub
How do I adjust the sub to handle the page-start event and page-end event ( if it's even still called that way)
Edit: I just imported all the stuff just to be sure I got everything. When everything is working fine I am just gonna remove everything not being used.
With some efforts, I could implement PAGE_END event in vb.net. Here is the code for you.
(A) In main module create pdf routine add:
*Dim HandlerRLA = New VariableHeaderEventHandlerRLA
PDFfile.AddEventHandler(PdfDocumentEvent.END_PAGE, HandlerRLA)*
(B) Add anlother class after End Class. You may add text/paragraph as per requirement. I have used image as Header and Footer on specific pages.
Public Class VariableHeaderEventHandlerRLA
Implements IEventHandler
Dim header As String
Dim doc As PdfDocument
Public Sub TextFooterEventHandler(ByRef doc As PdfDocument)
Me.doc = doc
End Sub
Public Sub HandleEvent([event2] As [Event]) Implements IEventHandler.HandleEvent
Dim docEvent1 As PdfDocumentEvent = event2
Dim canvas1 As PdfCanvas = New PdfCanvas(docEvent1.GetPage())
Dim pageSize1 As iText.Kernel.Geom.Rectangle = docEvent1.GetPage().GetPageSize()
'Dim canvas As Canvas = New Canvas(docEvent.GetPage(), New iText.Kernel.Geom.Rectangle(0, 0, pageSize.GetWidth(), pageSize.GetHeight))
Dim PDoc1 As PdfDocument = docEvent1.GetDocument()
Dim Page1 = docEvent1.GetPage()
Dim PageNo1 As Integer = PDoc1.GetPageNumber(Page1)
If PageNo1 > 1 Then
Dim imageFile, BottomImage As String
imageFile = "path to image folder\secondtop.bmp"
Dim data3 = ImageDataFactory.Create(imageFile)
BottomImage = "path to image folder\secondbottom2.bmp"
Dim data4 = ImageDataFactory.Create(BottomImage)
Dim Ratio = data3.GetHeight / data3.GetWidth
Dim rect As iText.Kernel.Geom.Rectangle = New iText.Kernel.Geom.Rectangle(0, 784, 595, 595 * Ratio)
With canvas1
.AddImage(data3, 0, 784, 595, 0)
'.AddImageFittedIntoRectangle(data3, rect, 0)
Ratio = data4.GetHeight / data4.GetWidth
rect = New iText.Kernel.Geom.Rectangle(0, 0, 595, 595 * Ratio)
'.AddImageFittedIntoRectangle(data4, rect, 0)
.AddImage(data4, 0, 0, 595, 0)
End With
End If
'Throw New NotImplementedException()
End Sub
End Class