关于iTextSharp的一些问题

时间:2013-06-24 09:21:33

标签: c# asp.net .net gridview itextsharp

我正在尝试使用ASP.NET和C#中的GridView制作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, 15, 5);
        }
        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, 15, 5);
        }

        // 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();

我的第一个问题是:如何使用“当前号码页/文档号码页面”添加单元格?

然后:我有一个带标题的表。如何集中列标题的文本?

下一篇:如何为我的表格单元格设置horizo​​ntalAligne.Right?

完成:别的:p我很抱歉我的错误,我是法国人:/

谢谢;)

1 个答案:

答案 0 :(得分:0)

为了使Headers和Cell文本居中,只需使用

 <RowStyle  HorizontalAlign="Center" />
 <AlternatingRowStyle HorizontalAlign="Center" />

在你的gridview中