IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

iTextSharp - Numéroter les pages


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut iTextSharp - Numéroter les pages
    Bonjour,

    Je débute avec iTextSharp, et on peu dire aussi avec les applications Windows Form.

    Je cherche (en VB.net) à ouvrir un fichier PDF existant, et ecrire en footer le numéro de chaque page, et dans le header mettre une image dans un des coins (une sorte de tampon en .png).

    Je ne trouve pas d'exemple de cela en vb.net, quelqu'un pourrait-il me donner des pistes ou exemples?

    D'avance Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut NEED AN ANSWER
    Vraiment personne en mesure de m'aider ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    Voici un exemple :
    Le code dans le WinForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Imports iTextSharp.text
    Imports iTextSharp.text.pdf
    Imports iTextSharp.text.Font
    Imports System.IO
    Imports iTextSharp.text.pdf.draw
     
    Public Class Form1
     
        Public socLogo As Image = Image.GetInstance(Application.StartupPath & "\Logo.png")
        Dim oldFile As String = Application.StartupPath & "\couleurs primaires.pdf"
        Dim newFile As String = Application.StartupPath & "\couleurs primaires modif.pdf"
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     
            ModifiePdf(oldFile)
            apercu(newFile)
     
        End Sub
     
        Private Sub apercu(ByVal pdfPathFile As String)
            System.Diagnostics.Process.Start(pdfPathFile)
        End Sub
     
        Sub ModifiePdf(fichier As String)
     
            Dim reader = New PdfReader(oldFile)
            Using fileStream = New FileStream(newFile, FileMode.Create, FileAccess.Write)
                Dim document = New Document(reader.GetPageSizeWithRotation(1))
                Dim writer = PdfWriter.GetInstance(document, fileStream)
     
                ' Entête et pied de page personnalisés se font en utilisant un gestionnaire d'événement
                ' Pour capturer ces événements, vous devez créer une classe qui implémente l'interface iTextSharp.text.pdf.IPdfPageEvent.
                ' Vous devez ensuite créer une instance de cette classe et la connecter à la propriété PageEvent de l'objet PdfWriter.
     
                Dim PageEventHandler As New HeaderFooter()
                writer.PageEvent = PageEventHandler
     
                'Une fois le document créé et les événements connectés, alors on peut commencer à ajouter du contenu.
                document.Open()
     
                For i As Integer = 1 To reader.NumberOfPages
     
                    Dim importedPage = writer.GetImportedPage(reader, i)
                    Dim contentByte = writer.DirectContent
                    ' Ajoute et déplace au besoin le contenu sur sa page.
                    contentByte.AddTemplate(importedPage, 15, -15)
                    ' si il faut une nouvelle page, on l'ajoute.
                    If i < reader.NumberOfPages Then document.NewPage()
     
                Next
     
                'Création d'une "PdfAction" pour le réglage de l'affichage du document. 
                'On définit l'affichage de notre document à la page 1, l'emplacement 0, hauteur de la page, avec un zoom de 66.6%.
                Dim pdfDest As New PdfDestination(PdfDestination.XYZ, 0, document.PageSize.Height, 0.666F)
                Dim action As PdfAction = PdfAction.GotoLocalPage(1, pdfDest, writer)
                writer.SetOpenAction(action)
     
                document.Close()
                writer.Close()
            End Using
            reader.Close()
        End Sub
     
    End Class
    Et la classe qui gère entête et pied de page.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/12/2016, 17h50
  2. numéroter les pages d'une feuille à partir de 3
    Par grrimag dans le forum Excel
    Réponses: 6
    Dernier message: 02/09/2008, 10h51
  3. Réponses: 5
    Dernier message: 28/04/2008, 17h55
  4. Numéroter les pages
    Par yopziggy dans le forum Visio
    Réponses: 1
    Dernier message: 17/04/2008, 09h32
  5. [WebForms]numéroter les pages d'un site web
    Par Xhunt dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 05/01/2007, 00h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo