begin process at 2010 09 06 03:40:03
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

VB.NET

 > GÉNÉRATION D'UN PDF AVEC COUVERTURE ET IMAGE EN PIED DE PAGE AVEC ITEXTSHARP

GÉNÉRATION D'UN PDF AVEC COUVERTURE ET IMAGE EN PIED DE PAGE AVEC ITEXTSHARP


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :VB.NET Source .NET ( DotNet ) Classé sous :VB Net, iTextsharp, document pdf Niveau :Débutant Date de création :19/09/2009 Date de mise à jour :08/10/2009 14:29:44 Vu :3 331

Auteur : sergentrazor

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Je voulais créer un PDF à partir d'une sélection de texte dans une RichTextBox, en insérant à ce PDF une couverture, et pour les pages suivantes, une image en pied de page... Sans utiliser les évenements.

Le PDF de couverture et l'image pied se trouvent dans le dossier Resources de l'application.

Dans une Form on met une RichTextBox et un bouton qui contient le code (sub click) suivant

        texte = RichTextBox.SelectedText
        if ExportModifié(texte)then
        msgbox("PDF exporté avec succès sur le bureau")
        Else
        msgbox("Echec de l'export!")
        end if
        
Pour ne pas avoir de surprises, l'image pied doit être en 72ppp, ce qui évite de lui appliquer un facteur de zoom au moment de son insertion dans le pdf.

Donc, voilà une petite fonction...(ne pas oublier d'ajouter iTextsharp dans les références du projet)

Source

  • Imports System.IO
  • Imports iTextSharp
  • Imports iTextSharp.text
  • Imports iTextSharp.text.pdf
  • Imports iTextSharp.text.xml
  • Module Module1
  • Public Function ExportModifié(ByRef redaction As String) As Boolean
  • Try
  • Dim STRImagePied = Image.GetInstance(Application.StartupPath + "\Resources\Pied.jpg")
  • Dim STRdirBureau = Environ("USERPROFILE") & "\Bureau\"
  • Dim IntNumb, IntCount As Integer
  • Dim ReaderCouverture As New PdfReader(Application.StartupPath + "\Resources\Couverture.pdf")
  • Dim CouvertureSize As iTextSharp.text.Rectangle = ReaderCouverture.GetPageSize(1)
  • Dim Temp As New Document(CouvertureSize, 36, 36, 36, 88) 'Document temporaire sans pied, le nombre de page n'étant pas connu, on insèrera le pied ultérieurement, en reservant 88 pixels, ce qui correspond à la hauteur de l'image pied
  • Dim WriterTemp As PdfWriter = PdfWriter.GetInstance(Temp, File.Create(Application.StartupPath + "\Resources\Temp.pdf"))
  • Temp.Open() 'On ouvre le document temporaire maintenant, pour affecter les valeurs à ContentByteTemp et ImportCouverture au moment de leur définition
  • Dim ContentByteTemp As PdfContentByte = WriterTemp.DirectContent
  • Dim ImportCouverture As PdfImportedPage = WriterTemp.GetImportedPage(ReaderCouverture, 1)
  • Dim bfArial = BaseFont.CreateFont(Application.StartupPath + "\Resources\ARIAL.TTF", BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
  • Dim arial = New Font(bfArial, 12, FontStyle.Regular, Color.BLACK)
  • Dim Paragraphe As Paragraph = New Paragraph
  • Temp.NewPage()
  • ContentByteTemp.AddTemplate(ImportCouverture, 1.0F, 0, 0, 1.0F, 0, 0)
  • Temp.NewPage()
  • Paragraphe.Add(New Chunk(redaction, New Font(arial)))
  • Temp.Add(Paragraphe)
  • Temp.Close()
  • Dim ReaderTemp As New PdfReader(Application.StartupPath + "\Resources\Temp.pdf")
  • Dim Final As New Document(CouvertureSize, 0, 0, 0, 0)
  • Dim WriterFinal As PdfWriter = PdfWriter.GetInstance(Final, File.Create(STRdirBureau & "Final.pdf"))
  • Final.Open() 'idem Temp.Open...
  • Dim ContentByteFinal As PdfContentByte = WriterFinal.DirectContent
  • Dim ImportTemp As PdfImportedPage
  • 'Création de la couverture dans le document final
  • Final.NewPage()
  • IntCount = 1
  • ImportTemp = WriterFinal.GetImportedPage(ReaderTemp, IntCount)
  • ContentByteFinal.AddTemplate(ImportTemp, 1.0F, 0, 0, 1.0F, 0, 0)
  • IntCount = IntCount + 1
  • IntNumb = ReaderTemp.NumberOfPages
  • 'Création des pages suivantes, avec l'image en pied de page
  • Do While IntCount <= IntNumb
  • Final.NewPage()
  • ImportTemp = WriterFinal.GetImportedPage(ReaderTemp, IntCount)
  • ContentByteFinal.AddTemplate(ImportTemp, 1.0F, 0, 0, 1.0F, 0, 0)
  • STRImagePied.SetAbsolutePosition(Final.PageSize.Width - 740, 0)
  • Final.Add(STRImagePied)
  • IntCount = IntCount + 1
  • Loop
  • Final.Close()
  • File.Delete(Application.StartupPath + "\Resources\Temp.pdf")
  • Catch
  • ExportModifié = False
  • End Try
  • ExportModifié = True
  • End Function
  • End Module
Imports System.IO
Imports iTextSharp
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.text.xml

Module Module1




    


    Public Function ExportModifié(ByRef redaction As String) As Boolean

        Try
            Dim STRImagePied = Image.GetInstance(Application.StartupPath + "\Resources\Pied.jpg")
            Dim STRdirBureau = Environ("USERPROFILE") & "\Bureau\"
            Dim IntNumb, IntCount As Integer
            Dim ReaderCouverture As New PdfReader(Application.StartupPath + "\Resources\Couverture.pdf")
            Dim CouvertureSize As iTextSharp.text.Rectangle = ReaderCouverture.GetPageSize(1)
            Dim Temp As New Document(CouvertureSize, 36, 36, 36, 88) 'Document temporaire sans pied, le nombre de page n'étant pas connu, on insèrera le pied ultérieurement, en reservant 88 pixels, ce qui correspond à la hauteur de l'image pied
            Dim WriterTemp As PdfWriter = PdfWriter.GetInstance(Temp, File.Create(Application.StartupPath + "\Resources\Temp.pdf"))

            Temp.Open() 'On ouvre le document temporaire maintenant, pour affecter les valeurs à ContentByteTemp et ImportCouverture au moment de leur définition

            Dim ContentByteTemp As PdfContentByte = WriterTemp.DirectContent
            Dim ImportCouverture As PdfImportedPage = WriterTemp.GetImportedPage(ReaderCouverture, 1)
            Dim bfArial = BaseFont.CreateFont(Application.StartupPath + "\Resources\ARIAL.TTF", BaseFont.CP1252, BaseFont.NOT_EMBEDDED)
            Dim arial = New Font(bfArial, 12, FontStyle.Regular, Color.BLACK)
            Dim Paragraphe As Paragraph = New Paragraph

            Temp.NewPage()
            ContentByteTemp.AddTemplate(ImportCouverture, 1.0F, 0, 0, 1.0F, 0, 0)
            Temp.NewPage()
            Paragraphe.Add(New Chunk(redaction, New Font(arial)))
            Temp.Add(Paragraphe)

            Temp.Close()

            Dim ReaderTemp As New PdfReader(Application.StartupPath + "\Resources\Temp.pdf")
            Dim Final As New Document(CouvertureSize, 0, 0, 0, 0)
            Dim WriterFinal As PdfWriter = PdfWriter.GetInstance(Final, File.Create(STRdirBureau & "Final.pdf"))

            Final.Open() 'idem Temp.Open...

            Dim ContentByteFinal As PdfContentByte = WriterFinal.DirectContent
            Dim ImportTemp As PdfImportedPage

            'Création de la couverture dans le document final 
            Final.NewPage()
            IntCount = 1
            ImportTemp = WriterFinal.GetImportedPage(ReaderTemp, IntCount)
            ContentByteFinal.AddTemplate(ImportTemp, 1.0F, 0, 0, 1.0F, 0, 0)
            IntCount = IntCount + 1

            IntNumb = ReaderTemp.NumberOfPages
            'Création des pages suivantes, avec l'image en pied de page
            Do While IntCount <= IntNumb
                Final.NewPage()
                ImportTemp = WriterFinal.GetImportedPage(ReaderTemp, IntCount)
                ContentByteFinal.AddTemplate(ImportTemp, 1.0F, 0, 0, 1.0F, 0, 0)
                STRImagePied.SetAbsolutePosition(Final.PageSize.Width - 740, 0)
                Final.Add(STRImagePied)
                IntCount = IntCount + 1
            Loop

            Final.Close()
            File.Delete(Application.StartupPath + "\Resources\Temp.pdf")

        Catch
            ExportModifié = False

        End Try
        ExportModifié = True

    End Function


End Module



 Sources de la même categorie

Source avec Zip MODIFIER LA BASE DE REGISTRE par Anakin79
Source avec Zip Source .NET (Dotnet) ENVOIE D'EMAIL par Anakin79
Source avec Zip Source avec une capture MATH APPLIQUE par yacjava
Source avec Zip Source avec une capture Source .NET (Dotnet) CALCULS DE DATES À PARTIR D'UN CALENDRIER par jcbouli
Source avec Zip Source avec une capture Source .NET (Dotnet) TEST DE LIAISON SERIE par errun54

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) EXEMPLE D'UTILISATION DU XML AVEC VB.NET par christian_grandjean
Source .NET (Dotnet) OBTENIR L'HEURE DE DÉMARRAGE D'UN PC DISTANT EN SE CONNECTAN... par monpcmenerve
Source avec Zip Source .NET (Dotnet) TIC TAC TOE AVEC INTELLIGENCE ARTIFICIELLE par 974Dom
Source avec Zip Source avec une capture Source .NET (Dotnet) ENVOI D'EMAIL AVEC DES API WINDOWS VIA UNE INTERFACE GRAPHIQ... par Belouafi

Commentaires et avis

Commentaire de sergentrazor le 19/09/2009 23:26:45

Il y a peut être plus simple, mais certainement plus compliqué!

Commentaire de TigerFab le 20/09/2009 12:21:22

Ce code est intéressant.

Est-ce que iTextsharp permettrait de faire de la conversion de document (.doc/.xls --> .pdf) ?

Commentaire de sergentrazor le 20/09/2009 14:08:27

Bonne question!
Je dirais oui puisqu'il est possible de manipuler du texte, des images et des tableaux avec itextsharp...


Commentaire de SSSkud le 30/09/2009 14:35:10

Bonjour,

Je suis actuellement connecté derrière un parfeu assez contraignant.

Est ce que l'un d'entre vous aurait un lien pour télécharger iTextSharp depuis un ftp ou quelque chose du genre.

Le parfeu bloque les pages qui contiennent téléchargement / freeware dans l'url mais pas celle qui ont ftp://.

Bref je sens que ce code peut m'être très utile pour mon projet ! : )

Commentaire de sergentrazor le 01/10/2009 06:59:46

Bah, au pire laisse moi ton mail en mp, et je t'envoie la dll, elle ne pèse que 3 Mo:-)

Commentaire de SSSkud le 01/10/2009 09:29:18 9/10

Merci de ta proposition SERGENTRAZOR, mais je suis rentré chez moi entre temps et j'ai récupéré la .dll sur USB.

Par contre j'ai un autre soucis, quand je compile ce code, j'ai une erreur que je ne connais pas au niveau du code du bouton (sub)"if ExportModifié(texte)then" VS 2005 me répond :

"Cet assembly n'autorise pas les appelants d'un niveau de confiance partiel."

Désolé si cette question est triviale, je ne suis vraiment pas accoutumé à la technologie microsoft.

Commentaire de sergentrazor le 01/10/2009 18:24:04

Je dirais problème de sécurité d'accès du code (onglet sécurité des propriétés de ton projet... Pour mon projet je n'ai pas utilisé les paramètres de sécurité ClickOnce , tu as du les définir sur application de confiance partielle non?

En passant à application de confiance totale cela devrait régler le problème, si tu tiens à utiliser ClickOnce

En règle générale, je n'utilise pas les options ClickOnce, ni la publication "basique" de visual studio (je préfère une installation classique mais avec la version express, il faut passer par des outils complémentaires je crois)...

Commentaire de guilleto le 28/07/2010 14:28:55

Bonjour sergentrazor,

J'essaye de faire fonctionner votre code mais cela m'indique 2 erreurs sur les lignes suivantes :
Dim arial = New Font(bfArial, 12, FontStyle.Regular, Color.Black)
Paragraphe.Add(New Chunk(redaction, New Font(arial)))

Avec comme message d'erreur :
Erreur 1 La résolution de surcharge a échoué, car aucun 'New' accessible ne peut être appelé avec ces arguments :
    'Public Sub New(bf As iTextSharp.text.pdf.BaseFont, size As Single, style As Integer, color As iTextSharp.text.BaseColor)': Une valeur de type 'System.Drawing.Color' ne peut pas être convertie en 'iTextSharp.text.BaseColor'.
    'Public Sub New(family As iTextSharp.text.Font.FontFamily, size As Single, style As Integer, color As iTextSharp.text.BaseColor)': Une valeur de type 'iTextSharp.text.pdf.BaseFont' ne peut pas être convertie en 'iTextSharp.text.Font.FontFamily'.
    'Public Sub New(family As iTextSharp.text.Font.FontFamily, size As Single, style As Integer, color As iTextSharp.text.BaseColor)': Une valeur de type 'System.Drawing.Color' ne peut pas être convertie en 'iTextSharp.text.BaseColor'.

et

Erreur 2 La résolution de surcharge a échoué, car aucun 'New' accessible ne peut être appelé sans conversion restrictive :
    'Public Sub New(family As iTextSharp.text.Font.FontFamily)': L'argument qui correspond au paramètre 'family' passe de 'Object' à 'iTextSharp.text.Font.FontFamily'.
    'Public Sub New(bf As iTextSharp.text.pdf.BaseFont)': L'argument qui correspond au paramètre 'bf' passe de 'Object' à 'iTextSharp.text.pdf.BaseFont'.
    'Public Sub New(other As iTextSharp.text.Font)': L'argument qui correspond au paramètre 'other' passe de 'Object' à 'iTextSharp.text.Font'.

Que dois-je faire pour corriger cela ?

Par avance merci

Olivier

Commentaire de sergentrazor le 28/07/2010 20:14:07

Ce soir je n'ai pas trop le temps de regarder, mais je vais jeter un oeil là dessus ce week-end...

Question:
- les options explicit et strict sont elles "off" ou "on" dans ton projet?...

essaye ceci...dans le code d'origine la déclaration était implicite, ce pourrait être l'origine du problème:

Dim bfArial as BaseFont = BaseFont.CreateFont(etc...)
Dim arial as Font = New Font(etc...)

Commentaire de sergentrazor le 28/07/2010 21:25:29

j'ai regardé (en vitesse) et j'ai l'impression qu'il y a eu des changements dans la version de la dll que je t'ai donné et celle que j'ai utilisé dans l'exemple.
Certaines conversions ne sont plus tolérées!!!


--> on explicite : Dim bfArial as BaseFont = BaseFont.CreateFont(etc...) donc pas de conversion de Object(par défaut si déclaration implicite) vers iTextSharp.text.pdf.BaseFont

--> on passe les paramètres corrects (et on explicite au passage): Dim arial As Font = New Font(bfArial, 12, Font.NORMAL, BaseColor.BLACK) donc pas de conversion de
System.Drawing en iTextSharp.text sur le style et la couleur.

bfArial est bien un iTextSharp.text.pdf.BaseFont, 12 un Int, Font.Normal un Int, BaseColor.BLACK un iTextSharp.text.BaseColor

Chez moi ça fonctionne comme ça (Pense à tes imports)...

Fais attention également au fait que cette source a vieilli et certaines variables d'environnement ne sont peut être pas les mêmes sous XP et Seven, ce code était surtout donné à des fins d'exemple...

iTextsharp est abondamment documentée en C# mais peu en VB... D'ici une ou deux semaines je vais avoir l'occasion de la réutiliser dans un projet ASP.NET codé en VB, je pense que d'ici la fin Aout je ferai un petit tuto pour l'utiliser en VB pas à pas et bien mieux expliqué...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Comment créer des PDF remplissables ? [ par Phil72000 ] Bonjour,J'utilise avec succès itextsharp.dll 4.0.4.0.J'aimerais maintenant aller plus loin en créant des PDF remplissables avec ajout de texte, case à itextSharp [ par ha10 ] Bonjour, SVP je cherche un lien qui me permet de télécharger itextSharp.dll pour écrire des pdf à partir de VB.NET J'ai essayé plusieurs lien mais ils


Nos sponsors


Sondage...

CalendriCode

Septembre 2010
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
27282930   

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales