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();
私の最初の質問は、「現在の番号ページ/ドキュメントの番号ページ」でセルを追加する方法ですか?
次に:ヘッダー付きのテーブルがあります。列ヘッダーのテキストを中央に配置する方法は?
次へ: 表のセルに horizontalAligne.Right を設定するには?
最後に : 他に何もありません :p フレーズの間違いでごめんなさい、私はフランス人です :/
ありがとう ;)