giovedì 7 gennaio 2016

.Net Generare un file PDF contenente una tabella tramite ItextSharp VB.Net e C#

Si riporta l'articolo scritto per il sito http://www.iprogrammatori.it/articoli/programmazione/art_generare-un-file-pdf-contenente-una-tabe_1419.aspx

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 http://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 fileStream As New FileStream("E:\test.pdf", FileMode.Create, FileAccess.Write, FileShare.None)

 

        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.

Nessun commento: