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
| Public Class HeaderFooter
Inherits PdfPageEventHelper
' C'est un conteneur de texte
Private cb As PdfContentByte
' we will put the final number of pages in a template
Private template As PdfTemplate
' this is the BaseFont we are going to use for the header / footer
Private bf As BaseFont = Nothing
' we override the onOpenDocument method
Public Overrides Sub OnOpenDocument(ByVal writer As PdfWriter, ByVal document As Document)
Try
bf = pdf.BaseFont.CreateFont(pdf.BaseFont.HELVETICA, pdf.BaseFont.CP1252, pdf.BaseFont.NOT_EMBEDDED)
cb = writer.DirectContent
' Création de la plage qui recevra le nbre total de pages du document (vu dans le pied de page).
template = cb.CreateTemplate(50, 50)
Catch de As DocumentException
Catch ioe As System.IO.IOException
End Try
End Sub
Public Overrides Sub OnStartPage(ByVal writer As PdfWriter, ByVal document As Document)
MyBase.OnStartPage(writer, document)
Dim pageSize As Rectangle = document.PageSize
Dim cellHeight As Single = 50
' PDF document size
Dim PgSize As Rectangle = document.PageSize
' create one column table
Dim head As New PdfPTable(1)
head.TotalWidth = PgSize.Width - 70
Dim logoEnt As Image = Form1.socLogo
' add image; PdfPCell() overload sizes image to fit cell
Dim c As New PdfPCell(logoEnt, True)
c.Border = 0
c.HorizontalAlignment = Element.ALIGN_CENTER
c.FixedHeight = cellHeight
c.Left = 0
head.AddCell(c)
head.WriteSelectedRows(0, -1, pageSize.GetLeft(35), pageSize.GetTop(10), cb)
End Sub
Private moBF As BaseFont = pdf.BaseFont.CreateFont(pdf.BaseFont.HELVETICA, pdf.BaseFont.CP1252, pdf.BaseFont.NOT_EMBEDDED)
Public Overrides Sub OnEndPage(ByVal writer As PdfWriter, ByVal document As Document)
MyBase.OnEndPage(writer, document)
'*** PIED DE PAGE *************
'Affiche le N° de page
Dim oTable As New PdfPTable(1)
With oTable
Dim iPageNumber As Integer = writer.PageNumber
Dim sText As String = "Page " & iPageNumber & " sur "
oTable.TotalWidth = document.PageSize.Width - 70
oTable.WriteSelectedRows(0, -1, 36, 15, writer.DirectContent)
Dim fLen As Single = moBF.GetWidthPoint(sText, 10)
cb.BeginText()
cb.SetFontAndSize(moBF, 8)
cb.SetTextMatrix(document.PageSize.Width - 90, 16)
cb.ShowText(sText)
cb.EndText()
cb.AddTemplate(template, document.PageSize.Width - 100 + fLen, 16)
End With
End Sub
' Récupère le total des pages du PDF
Public Overrides Sub OnCloseDocument(ByVal writer As PdfWriter, ByVal document As Document)
MyBase.OnCloseDocument(writer, document)
template.BeginText()
template.SetFontAndSize(bf, 8)
template.SetTextMatrix(0, 0)
template.ShowText("" & Convert.ToString((writer.PageNumber - 1)))
template.EndText()
End Sub
End Class |
Partager