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