关于iTextSharp的一些问题

本文关键字:问题 iTextSharp 关于 | 更新日期: 2023-09-27 18:19:35

我正在尝试在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();

我的第一个问题是:如何添加具有"当前数字页/文档的数字页"的单元格?

然后:我有一张带表头的桌子。如何将列标题的文本居中?

下一篇:如何进行水平对齐。是否适合我的表格单元格?

结束语:没有其他:p我对我的短语错误感到抱歉,我是法国人:/

谢谢;)

关于iTextSharp的一些问题

为了使页眉和单元格文本居中,只需使用

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

在您的网格视图