Generare un file PDF contenente una tabella tramite .Net ItextSharp

Articolo che illustra la tecnica per la creazione di una tabella nel file pdf tramite la libreria gratuita ITextSharp.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

In questo articolo vedremo come generare un file “Pdf” tramite la tecnologia .Net sia in ambiente Web che in ambiente Windows Application, utilizzando i due linguaggi di programmazione più utilizzati VB.Net e C#

La generazione del file avviene tramite il componente iTextSharp. che abbiamo visto il relativo utilizzo in un precedente articolo https://www.iprogrammatori.it/articoli/programmazione/art_generare-file-pdf-in-net-vbnet-e-c_1417.aspx

Stesura del codice

Creare un progetto di tipo Web e Windows Application in base al proprio linguaggio di programmazione.
Nella form, aggiungete un pulsante, il quale permetterà di generare una tabella con tre colonne ed un titolo.
Passate in visualizzazione codice, ed aggiungere il seguente spazio dei nomi, ricordando di aver aggiunto tra i riferimenti la libreria "ItextSharp".



VB.Net
Imports iTextSharp.text
Imports iTextSharp.text.pdf
C#
using iTextSharp.text;
using iTextSharp.text.pdf;


A questo punto nell’evento click del pulsante dobbiamo scrivere il codice che permette tramite la classe “PdfTable” di creare una tabella, se viene passato un valore di tipo numero, indicherà  il numero delle colonne.
Naturalmente l’oggetto PdfTable contiene diverse proprietà che ci permette di gestire l’allineamento, se visualizzare o no il border, ed altro ancora.
Qui di seguito si riporta il frammento di codice per entrambi i linguaggi e per entrambi l’architettura.

Web.
VB.Net
Protected Sub BtnGeneraTable_Click(sender As Object, e As EventArgs) Handles BtnGeneraTable.Click
        Dim Documento As New Document(PageSize.A4, 100, 100, 25, 25)
        Dim output = New MemoryStream()
        Dim Scrittura As PdfWriter = PdfWriter.GetInstance(Documento, output)
        Documento.Open()
        'Tabella con tre colonne
        Dim tabella As New PdfPTable(3)
        'dimensione
        tabella.TotalWidth = 550.0F
        'larghezza colonne
        Dim larghezzaColonne As Single() = New Single() {150.0F, 150.0F, 150.0F}
        tabella.SetWidths(larghezzaColonne)
        tabella.HorizontalAlignment = 0  'left
        'titolo
        Dim cellaTitolo As New PdfPCell(New Phrase("Iscritti "))
        cellaTitolo.HorizontalAlignment = 1 'center
        cellaTitolo.Border = 0
        cellaTitolo.Colspan = 3
        tabella.AddCell(cellaTitolo)
        Dim SottoTitolo = FontFactory.GetFont("Arial", 14, iTextSharp.text.Font.BOLD)
        tabella.AddCell(New Phrase("Nome", SottoTitolo))
        tabella.AddCell(New Phrase("Cognome", SottoTitolo))
        tabella.AddCell(New Phrase("Città", SottoTitolo))
        'valorizzo con il  testo
        tabella.AddCell("Emanuele")
        tabella.AddCell("Mattei")
        tabella.AddCell("Roma")
        tabella.AddCell("Marco")
        tabella.AddCell("Maffei")
        tabella.AddCell("Mantova")
        Documento.Add(tabella)
        Documento.Close()
        Me.Response.BufferOutput = True
        Me.Response.Clear()
        Me.Response.ClearHeaders()
        Me.Response.ContentType = "application/octet-stream"
        Me.Response.AddHeader("Content-Disposition", "attachment; filename=test.pdf")
        Me.Response.BinaryWrite(output.GetBuffer())
        Me.Response.Flush()
        Me.Response.End()
    End Sub
C#
    protected void BtnGeneraTable_Click(object sender, EventArgs e)
        {
            Document Documento = new Document(PageSize.A4, 100, 100, 25, 25);
            MemoryStream output = new MemoryStream();
            PdfWriter Scrittura = PdfWriter.GetInstance(Documento, output);
            Documento.Open();
            //Tabella con tre colonne
            PdfPTable tabella = new PdfPTable(3);
            //dimensione
            tabella.TotalWidth = 550f;
            //larghezza colonne
            float[] larghezzaColonne = new float[] { 150f, 150f, 150f };
            tabella.SetWidths(larghezzaColonne);
            tabella.HorizontalAlignment = 0; //left
            //titolo
            PdfPCell cellaTitolo = new PdfPCell(new Phrase("Iscritti "));
            cellaTitolo.HorizontalAlignment = 1; //center
            cellaTitolo.Border = 0;
            cellaTitolo.Colspan = 3;
            tabella.AddCell(cellaTitolo);
            var SottoTitolo = FontFactory.GetFont("Arial", 14, iTextSharp.text.Font.BOLD);
            tabella.AddCell(new Phrase("Nome", SottoTitolo));
            tabella.AddCell(new Phrase("Cognome", SottoTitolo));
            tabella.AddCell(new Phrase("Città", SottoTitolo));
            //valorizzo con il  testo
            tabella.AddCell("Emanuele");
            tabella.AddCell("Mattei");
            tabella.AddCell("Roma");
            tabella.AddCell("Marco");
            tabella.AddCell("Maffei");
            tabella.AddCell("Mantova");         
  Documento.Add(tabella);
            Documento.Close();
            this.Response.BufferOutput = true;
            this.Response.Clear();
            this.Response.ClearHeaders();
            this.Response.ContentType = "application/octet-stream";
            this.Response.AddHeader("Content-Disposition", "attachment; filename=test.pdf");
            this.Response.BinaryWrite(output.GetBuffer());
            this.Response.Flush();
            this.Response.End();       
}



Qui di seguito il codice per lo sviluppo di tipo applicazioni per Windows, ossia desktop.



Windows Application
VB.Net
  'Tabella con tre colonne
        Dim tabella As New PdfPTable(3)
        'dimensione
        tabella.TotalWidth = 550.0F
        'larghezza colonne
        Dim larghezzaColonne As Single() = New Single() {150.0F, 150.0F, 150.0F}
        tabella.SetWidths(larghezzaColonne)
        tabella.HorizontalAlignment = 0  'left
        'titolo
        Dim cellaTitolo As New PdfPCell(New Phrase("Iscritti "))
        cellaTitolo.HorizontalAlignment = 1 'center
        cellaTitolo.Border = 0
        cellaTitolo.Colspan = 3
        tabella.AddCell(cellaTitolo)
        Dim SottoTitolo = FontFactory.GetFont("Arial", 14, iTextSharp.text.Font.BOLD)
        tabella.AddCell(New Phrase("Nome", SottoTitolo))
        tabella.AddCell(New Phrase("Cognome", SottoTitolo))
        tabella.AddCell(New Phrase("Città", SottoTitolo))
        'valorizzo con il  testo
        tabella.AddCell("Emanuele")
        tabella.AddCell("Mattei")
        tabella.AddCell("Roma")
        tabella.AddCell("Marco")
        tabella.AddCell("Maffei")
        tabella.AddCell("Mantova")
        Dim Documento As New Document(PageSize.A4, 100, 100, 25, 25)
        Dim fileStream As New FileStream("E:\testTabellavb.pdf", FileMode.Create, FileAccess.Write, FileShare.None)
        Dim Scrittura As PdfWriter = PdfWriter.GetInstance(Documento, fileStream)
        Documento.Open()
        Documento.Add(tabella)
        Documento.Close()
C#
//Tabella con tre colonne
            PdfPTable tabella = new PdfPTable(3);
            //dimensione
            tabella.TotalWidth = 550f;
            //larghezza colonne
            float[] larghezzaColonne = new float[] { 150f, 150f, 150f };
            tabella.SetWidths(larghezzaColonne);
            tabella.HorizontalAlignment = 0; //left
            //titolo
            PdfPCell cellaTitolo = new PdfPCell(new Phrase("Iscritti "));
            cellaTitolo.HorizontalAlignment = 1; //center
            cellaTitolo.Border = 0;
            cellaTitolo.Colspan = 3;
            tabella.AddCell(cellaTitolo);
            var SottoTitolo = FontFactory.GetFont("Arial", 14, iTextSharp.text.Font.BOLD);
            tabella.AddCell(new Phrase("Nome", SottoTitolo));
            tabella.AddCell(new Phrase("Cognome", SottoTitolo));
            tabella.AddCell(new Phrase("Città", SottoTitolo));
            //valorizzo con il  testo
            tabella.AddCell("Emanuele");
            tabella.AddCell("Mattei");
            tabella.AddCell("Roma");
            tabella.AddCell("Marco");
            tabella.AddCell("Maffei");
            tabella.AddCell("Mantova");
            Document Documento = new Document(PageSize.A4, 100, 100, 25, 25);
            FileStream fileStream = new FileStream("E:\\testTabella.pdf", FileMode.Create, FileAccess.Write,
FileShare.None);
            PdfWriter Scrittura = PdfWriter.GetInstance(Documento, fileStream);
            Documento.Open();
            Documento.Add(tabella);
            Documento.Close();

Come si vede dal codice precedente, la classe PdfTable, permette di creare una tabella, che impostando varie proprietà, possiamo definire la larghezza, il bordo, il tipo di carattere etc.

Mentre la classe di tipo "PdfCell" ci permette di gestire le singole celle.

Il metodo "AddCell", crea a sua volta le varie celle con i valori che andremo ad impostare.

Conclusioni

L’articolo ha voluto fornire le basi per la creazione di un file pdf contenente una tabella. L'utilizzo della libreria gratuita ItextSharp, offre al programmatore diverse funzionalità per la manipolazione dei file pdf, oltre che alla creazione dei file. I metodi e proprietà di facile interpretazione, agevolano il lavoro di ogni programmatore.