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

C# Discussion :

aide pour iTextSharp


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur réseaux
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Points : 101
    Points
    101
    Par défaut aide pour iTextSharp
    Bonjour amis développeurs,
    Je suis en train de développer en C# avec iTextSharp afin de créer un PDF. J'ai trouvé des tutos afin de créer des fichiers PDF basiques et j'ai réussi à en créer.

    Maintenant, je voudrais créer un fichier PDF avec une table des matières, un entête et pied de page. J'ai bien sûr trouvé des morceaux de codes sur des autres forums, lu des tutoriels, mais aucun code n'est compréhensible pour moi et je m'en sors pas.

    Avez-vous des pistes s'il vous plaît? Est-ce que il existe une méthode simple pour créer une tables des matières, un entête et pied de page?

    Merci d'avance.
    Cordialement.

    ZeRedDiamond

    I'm back after all these years !!!

    Mon blog personnel

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Pour entête/pied de page, il faut intercepter les évènements d'iTextSharp : OnOpenDocument, OnEndDocument, OnCloseDocument.

    Pour cette réponse, je me base sur le code fourni ici, dans la réponse de Nilesh Thakkar.

    Voici le code pour créer un fichier. Tu dois avoir sensiblement le même :
    Code C# : 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
    private void CreatePDF()
            {
                string fileName = string.Empty;
     
                DateTime fileCreationDatetime = DateTime.Now;
     
                fileName = string.Format("{0}.pdf", fileCreationDatetime.ToString(@"yyyyMMdd") + "_" + fileCreationDatetime.ToString(@"HHmmss"));
     
                string pdfPath = Server.MapPath(@"~\PDFs\") +   fileName;
     
                using (FileStream msReport = new FileStream(pdfPath, FileMode.Create))
                {
                    //step 1
                    using (Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 140f, 10f))
                    {
                        try
                        {
                            // step 2
                            PdfWriter pdfWriter = PdfWriter.GetInstance(pdfDoc, msReport);
                            pdfWriter.PageEvent = new Common.ITextEvents();
     
                            //open the stream 
                            pdfDoc.Open();
     
                            for (int i = 0; i < 10; i++)
                            {
                                Paragraph para = new Paragraph("Hello world. Checking Header Footer", new Font(Font.FontFamily.HELVETICA, 22));
     
                                para.Alignment = Element.ALIGN_CENTER;
     
                                pdfDoc.Add(para);
     
                                pdfDoc.NewPage();
                            }
     
                            pdfDoc.Close();
     
                        }
                        catch (Exception ex)
                        {
                            //handle exception
                        }
     
                        finally
                        {
     
     
                        }
     
                    }
     
                }
            }
    Après le commentaire "// step2" il y a cette ligne :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    pdfWriter.PageEvent = new Common.ITextEvents();
    C'est là qu'on va pouvoir intercepter les événements. On va donc implémenter la classe ITextEvents. Personnellement je n'aime pas trop ce nom, car en général ce sont les interfaces qui ont des noms commencant par un I, et non des classes... Bref, c'est un autre débat.

    Pour reprendre l'exemple tel quel, voici la classe ITextEvents :
    Code C# : 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
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    public class ITextEvents : PdfPageEventHelper
        {
     
            // This is the contentbyte object of the writer
            PdfContentByte cb;
     
            // we will put the final number of pages in a template
            PdfTemplate headerTemplate, footerTemplate;
     
            // this is the BaseFont we are going to use for the header / footer
            BaseFont bf = null;
     
            // This keeps track of the creation time
            DateTime PrintTime = DateTime.Now;
     
     
            #region Fields
            private string _header;
            #endregion
     
            #region Properties
            public string Header
            {
                get { return _header; }
                set { _header = value; }
            }
            #endregion
     
     
            public override void OnOpenDocument(PdfWriter writer, Document document)
            {
                try
                {
                    PrintTime = DateTime.Now;
                    bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                    cb = writer.DirectContent;
                    headerTemplate = cb.CreateTemplate(100, 100);
                    footerTemplate = cb.CreateTemplate(50, 50);
                }
                catch (DocumentException de)
                {
     
                }
                catch (System.IO.IOException ioe)
                {
     
                }
            }
     
            public override void OnEndPage(iTextSharp.text.pdf.PdfWriter writer, iTextSharp.text.Document document)
            {
                base.OnEndPage(writer, document);
     
                iTextSharp.text.Font baseFontNormal = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 12f, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLACK);
     
                iTextSharp.text.Font baseFontBig = new iTextSharp.text.Font(iTextSharp.text.Font.FontFamily.HELVETICA, 12f, iTextSharp.text.Font.BOLD, iTextSharp.text.BaseColor.BLACK);
     
                Phrase p1Header = new Phrase("Sample Header Here", baseFontNormal);
     
                //Create PdfTable object
                PdfPTable pdfTab = new PdfPTable(3);
     
                //We will have to create separate cells to include image logo and 2 separate strings
                //Row 1
                PdfPCell pdfCell1 = new PdfPCell();
                PdfPCell pdfCell2 = new PdfPCell(p1Header);
                PdfPCell pdfCell3 = new PdfPCell();
                String text = "Page " + writer.PageNumber + " of ";
     
     
                //Add paging to header
                {
                    cb.BeginText();
                    cb.SetFontAndSize(bf, 12);
                    cb.SetTextMatrix(document.PageSize.GetRight(200), document.PageSize.GetTop(45));
                    cb.ShowText(text);
                    cb.EndText();
                    float len = bf.GetWidthPoint(text, 12);
                    //Adds "12" in Page 1 of 12
                    cb.AddTemplate(headerTemplate, document.PageSize.GetRight(200) + len, document.PageSize.GetTop(45));
                }
                //Add paging to footer
                {
                    cb.BeginText();
                    cb.SetFontAndSize(bf, 12);
                    cb.SetTextMatrix(document.PageSize.GetRight(180), document.PageSize.GetBottom(30));
                    cb.ShowText(text);
                    cb.EndText();
                    float len = bf.GetWidthPoint(text, 12);
                    cb.AddTemplate(footerTemplate, document.PageSize.GetRight(180) + len, document.PageSize.GetBottom(30));
                }
                //Row 2
                PdfPCell pdfCell4 = new PdfPCell(new Phrase("Sub Header Description", baseFontNormal));
                //Row 3
     
     
                PdfPCell pdfCell5 = new PdfPCell(new Phrase("Date:" + PrintTime.ToShortDateString(), baseFontBig));
                PdfPCell pdfCell6 = new PdfPCell();
                PdfPCell pdfCell7 = new PdfPCell(new Phrase("TIME:" + string.Format("{0:t}", DateTime.Now), baseFontBig));
     
     
                //set the alignment of all three cells and set border to 0
                pdfCell1.HorizontalAlignment = Element.ALIGN_CENTER;
                pdfCell2.HorizontalAlignment = Element.ALIGN_CENTER;
                pdfCell3.HorizontalAlignment = Element.ALIGN_CENTER;
                pdfCell4.HorizontalAlignment = Element.ALIGN_CENTER;
                pdfCell5.HorizontalAlignment = Element.ALIGN_CENTER;
                pdfCell6.HorizontalAlignment = Element.ALIGN_CENTER;
                pdfCell7.HorizontalAlignment = Element.ALIGN_CENTER;
     
     
                pdfCell2.VerticalAlignment = Element.ALIGN_BOTTOM;
                pdfCell3.VerticalAlignment = Element.ALIGN_MIDDLE;
                pdfCell4.VerticalAlignment = Element.ALIGN_TOP;
                pdfCell5.VerticalAlignment = Element.ALIGN_MIDDLE;
                pdfCell6.VerticalAlignment = Element.ALIGN_MIDDLE;
                pdfCell7.VerticalAlignment = Element.ALIGN_MIDDLE;
     
     
                pdfCell4.Colspan = 3;
     
     
     
                pdfCell1.Border = 0;
                pdfCell2.Border = 0;
                pdfCell3.Border = 0;
                pdfCell4.Border = 0;
                pdfCell5.Border = 0;
                pdfCell6.Border = 0;
                pdfCell7.Border = 0;
     
     
                //add all three cells into PdfTable
                pdfTab.AddCell(pdfCell1);
                pdfTab.AddCell(pdfCell2);
                pdfTab.AddCell(pdfCell3);
                pdfTab.AddCell(pdfCell4);
                pdfTab.AddCell(pdfCell5);
                pdfTab.AddCell(pdfCell6);
                pdfTab.AddCell(pdfCell7);
     
                pdfTab.TotalWidth = document.PageSize.Width - 80f;
                pdfTab.WidthPercentage = 70;
                //pdfTab.HorizontalAlignment = Element.ALIGN_CENTER;
     
     
                //call WriteSelectedRows of PdfTable. This writes rows from PdfWriter in PdfTable
                //first param is start row. -1 indicates there is no end row and all the rows to be included to write
                //Third and fourth param is x and y position to start writing
                pdfTab.WriteSelectedRows(0, -1, 40, document.PageSize.Height - 30, writer.DirectContent);
                //set pdfContent value
     
                //Move the pointer and draw line to separate header section from rest of page
                cb.MoveTo(40, document.PageSize.Height - 100);
                cb.LineTo(document.PageSize.Width - 40, document.PageSize.Height - 100);
                cb.Stroke();
     
                //Move the pointer and draw line to separate footer section from rest of page
                cb.MoveTo(40, document.PageSize.GetBottom(50) );
                cb.LineTo(document.PageSize.Width - 40, document.PageSize.GetBottom(50));
                cb.Stroke();
            }
     
            public override void OnCloseDocument(PdfWriter writer, Document document)
            {
                base.OnCloseDocument(writer, document);
     
                headerTemplate.BeginText();
                headerTemplate.SetFontAndSize(bf, 12);
                headerTemplate.SetTextMatrix(0, 0);
                headerTemplate.ShowText((writer.PageNumber - 1).ToString());
                headerTemplate.EndText();
     
                footerTemplate.BeginText();
                footerTemplate.SetFontAndSize(bf, 12);
                footerTemplate.SetTextMatrix(0, 0);
                footerTemplate.ShowText((writer.PageNumber - 1).ToString());
                footerTemplate.EndText();
     
     
            }
        }
    Dans OnOpenDocument, on initialise des Templates, qui permettront par la suite d'injecter le contenu du header et du footer.

    Dans OnEndPage, on crée le header et le footer que l'on stocke dans les templates créés avant.

    Enfin, dans OnCloseDocument, on insère dans les templates le numéro de la dernière page.

    Cet exemple vise à ajouter un tableau contenant un logo, la pagination et le titre/sous-titre. C'est un peu plus compliqué que ce que tu cherches à faire, mais c'est un bon exemple pour pouvoir tester des choses et voir les résultats.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur réseaux
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Points : 101
    Points
    101
    Par défaut
    Bonjour,
    Pardon du retard, mais j'étais en vacances.
    Merci beaucoup DotNetMatt pour ces explications et exemples, cela m'a beaucoup aidé.

    En plus, j'ai trouvé d'autres résultats plus intéressants. En fait, j'ai d'abord essayé avec FPDF en PHP mais je m'en sortait pas (je sais, c'est le mauvais forum), je me suis donc tourné vers une application C#.

    En tout cas, merci encore de la réponse rapide.
    Cordialement.

    ZeRedDiamond

    I'm back after all these years !!!

    Mon blog personnel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  2. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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