2013-06-24 41 views
0

我正在尝试使用ASP.NET和C#中的GridView制作PDF。有关iTextSharp的一些问题

就目前而言,我有这样的代码:

// 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?

要完成:闲来无事:对,我对不起我的短语的错误,我是法国人:/

感谢;)

+0

好吧,我发现我如何为第二和第三响应做。但对于第一个,我不知道该怎么做... – user2265252

+0

可能重复的[当前号码页和文档的号码页](http://stackoverflow.com/questions/17275761/current-number-page-and-文件号码页) –

+0

大声笑。这是我的其他帖子...不知道? – user2265252

回答

0

中序,使头和细胞文本中心只使用

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

在你的GridView