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

 .NET Discussion :

Quelques questions sur iTextSharp


Sujet :

.NET

  1. #1
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut Quelques questions sur iTextSharp
    Bonjour à tous ,



    j'essaie de générer un document PDF à partir d'une GridView avec iTextSharp, C# et ASP.NET.



    Pour le moment j'arrives à générer le document avec les informations de mon tableau dedans. Mais j'aimerais faire quelques modifications et je bloque sur certains points :/.



    Voici mon code c# :

    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
    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
    // ************** ETAPE 3 : On exporte vers le pdf ************ //
     
                // On récupère le n ombre de lignes et de colonne de la GridView
                int noOfColumns = gvReportingStockComp.Columns.Count;
                int noOfRows = gvReportingStockComp.Rows.Count;
     
                // On fixe les informations concernant les tailles de police du document PDF
                float HeaderTextSize = 8;
                float ReportNameSize = 10;
                float ReportTextSize = 8;
                float ApplicationNameSize = 7;
     
                // --- On crée le document final --- \\
                Document document = null;
                // Le document final sera-t-il en mode paysage ou non
                bool LandScape = true;
                if (LandScape == true)
                {
                    // Comme le document est en mode paysage, on execute une rotation sur ces dimensions
                    // Les 4 derniers paramètres de la fonction correspondent aux marges du document sur les bords
                    document = new Document(PageSize.A4.Rotate(), 0, 0, 0, 0);
                }
                else
                {
                    // On spécifie les dimensions du document
                    // Les 4 derniers paramètres de la fonction correspondent aux marges du document sur les bords
                    document = new Document(PageSize.A4, 0, 0, 0, 0);
                }
     
                // On créer un PdfTable qui contient le même nombre de colonne que la GridView.
                PdfPTable mainTable = new PdfPTable(noOfColumns);
     
                // Notre document sera composé de au minimum 4 lignes :
                // 1 : Nom appli + Date
                // 2 : Titre du tableau
                // 3 : Saut de ligne
                // 4 : Headers du tableau
                // X : Lignes du tableau
                mainTable.HeaderRows = 4;
     
                // On créer un PdfTable de 2 colonnes qui contiendra dans la première le titre de page et
                // dans la seconde une date
                PdfPTable headerTable = new PdfPTable(2);
     
                // On crée une phrase qui s'affichera dans le coin haut/gauche du document
                Phrase phApplicationName = new Phrase("Trèves", FontFactory.GetFont("Tahoma", ApplicationNameSize, iTextSharp.text.Font.NORMAL));
     
                // On crée une cellule PDF qui acceptera une phrase comme paramètre.
                PdfPCell clApplicationName = new PdfPCell(phApplicationName);
                // La cellule ne doit pas avoir de bordure
                clApplicationName.Border = PdfPCell.NO_BORDER;
                // On cadre le texte de la cellule à gauche
                clApplicationName.HorizontalAlignment = Element.ALIGN_LEFT;
     
                // On créer une phrase qui contiendra la date de création du document pour la cadré dans le coin haut/droite du document
                Phrase phDate = new Phrase(DateTime.Now.Date.ToString("dd/MM/yyyy"), FontFactory.GetFont("Tahoma", ApplicationNameSize, iTextSharp.text.Font.NORMAL));
     
                // On crée une cellule PDF qui acceptera une phrase comme paramètre.
                PdfPCell clDate = new PdfPCell(phDate);
                // On cadre le texte de la cellule à droite
                clDate.HorizontalAlignment = Element.ALIGN_RIGHT;
                // La cellule ne doit pas avoir de bordure
                clDate.Border = PdfPCell.NO_BORDER;
     
                // On ajoute ces cellules au tableau du document
                headerTable.AddCell(clApplicationName);
                headerTable.AddCell(clDate);
                // Pas de bordure
                headerTable.DefaultCell.Border = PdfPCell.NO_BORDER;
     
                // On crée une cellule PDF qui acceptera le headerTable et on l'ajoute à cette cellule
                PdfPCell cellHeader = new PdfPCell(headerTable);
                // Pas de bordure
                cellHeader.Border = PdfPCell.NO_BORDER;
                // On peut mettre une couleur de fond
                //cellHeader.BackgroundColor = Color.RED;
                // On indique que cet header va prendre une largeur égale
                // au nombre de colonne du tableau (pour qu'il prenne toute la page)
                cellHeader.Colspan = noOfColumns;
                // On ajoute la cellule au mainTable
                mainTable.AddCell(cellHeader);
     
                // On créer une autre phrase qui se trouverau au dessus du tableau
                string intituleTableau = lbBtnReportingStockComp.Text;
                Phrase phHeader = new Phrase(intituleTableau, FontFactory.GetFont("Tahoma", ReportNameSize, iTextSharp.text.Font.BOLD));
                PdfPCell clHeader = new PdfPCell(phHeader);
                clHeader.Colspan = noOfColumns;
                clHeader.Border = PdfPCell.NO_BORDER;
                clHeader.HorizontalAlignment = Element.ALIGN_CENTER;
                mainTable.AddCell(clHeader);
     
                // On créer un phrase qui représentera un saut de ligne
                Phrase phSpace = new Phrase("\n");
                PdfPCell clSpace = new PdfPCell(phSpace);
                clSpace.Border = PdfPCell.NO_BORDER;
                clSpace.Colspan = noOfColumns;
                mainTable.AddCell(clSpace);
     
                // On génère les noms de colonnes et on les insèrent
                for (int i = 0; i < noOfColumns; i++)
                {
                    Phrase ph = null;
     
                    ph = new Phrase(gvReportingStockComp.Columns[i].HeaderText, FontFactory.GetFont("Tahoma", HeaderTextSize, iTextSharp.text.Font.BOLD));
     
                    mainTable.AddCell(ph);
                }
     
                // On lit les lignes de la GridView et on les insère dans le mainTables
                for (int rowNo = 0; rowNo < noOfRows; rowNo++)
                {
                    for (int columnNo = 0; columnNo < noOfColumns; columnNo++)
                    {
                        if (gvReportingStockComp.Columns[columnNo] is TemplateField)
                        {
                            DataBoundLiteralControl lc = gvReportingStockComp.Rows[rowNo].Cells[columnNo].Controls[0] as DataBoundLiteralControl;
                            string s = lc.Text.Trim();
                            Phrase ph = new Phrase(s, FontFactory.GetFont("Tahoma", ReportTextSize, iTextSharp.text.Font.NORMAL));
                            mainTable.AddCell(ph);
                        }
                        else
                        {
                            // Trim() supprime en début et fin de chaîne les espaces blancs
                            string s = gvReportingStockComp.Rows[rowNo].Cells[columnNo].Text.Trim();
                            Phrase ph = new Phrase(s, FontFactory.GetFont("Tahoma", ReportTextSize, iTextSharp.text.Font.NORMAL));
                            mainTable.AddCell(ph);
                        }
                    }
     
                    // On dit que la ligne est terminé même si toutes les cellules n'ont pas été renseignées
                    mainTable.CompleteRow();
                }
     
                // On prend le document créé et on l'associe au flux de sortie
                PdfWriter.GetInstance(document, Response.OutputStream);
     
                // On créer un pied de page avec le numéro de page (on met le second paramètre à TRUE pour cela)
                HeaderFooter pdfFooter = new HeaderFooter(new Phrase(), true);
                pdfFooter.Alignment = Element.ALIGN_CENTER;
                pdfFooter.Border = iTextSharp.text.Rectangle.TOP_BORDER;
                pdfFooter.BorderWidth = 1;
     
                // On associe le pied de page au document
                document.Footer = pdfFooter;
     
                // Création du document puis fermeture
                document.Open();
                document.Add(mainTable);
                document.Close();
     
                Response.ContentType = "application/pdf";
                // On informe le nom du document
                Response.AddHeader("content-disposition", "attachment; filename= StockComp_"+date+".pdf");
                Response.End();

    Ma première question est : Comment ajouter une cellule en haut à droite de ma page avec "le numéro de la page courante / le nombre de page du document" ?

    Ensuite : J'ai des en-têtes de colonnes et j'aimerais les centrer mais je n'ai aucune idée de la façon de faire.

    Enfin : Même chose pour les cellules du tableau, j'aimerais centrer les cellules numériques à droite.

    J'espère que quelqu'un pourra m'aider au moins pour l'un de ces points

    Merci d'avance

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 391
    Points : 185
    Points
    185
    Par défaut
    Bon, j'ai trouvé pour les alignements. Pour ceux que ça interesse, je passe pas des PdfPCell :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    PdfPCell cell = null;
     
                            // Trim() supprime en début et fin de chaîne les espaces blancs
                            string s = gvReportingStockComp.Rows[rowNo].Cells[columnNo].Text.Trim();
                            Phrase ph = new Phrase(s, FontFactory.GetFont("Tahoma", ReportTextSize, iTextSharp.text.Font.NORMAL));
     
                            cell = new PdfPCell(ph);
     
                            if (columnNo > 1)
                            {
                                cell.HorizontalAlignment = Element.ALIGN_RIGHT;
                            }
     
                            mainTable.AddCell(cell);

    Mais je n'ai pas encore trouvé pour le nombre de page. Une idée ?

Discussions similaires

  1. Quelques questions sur les threads
    Par benj63 dans le forum C++Builder
    Réponses: 28
    Dernier message: 21/11/2005, 13h27
  2. Réponses: 19
    Dernier message: 21/10/2005, 19h24
  3. Quelques questions sur la mémoire
    Par Gruik dans le forum C
    Réponses: 6
    Dernier message: 17/11/2004, 14h38
  4. Quelques question sur Win 32 Appli
    Par lvdnono dans le forum Windows
    Réponses: 5
    Dernier message: 15/06/2004, 12h37
  5. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23

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