domingo, 9 de septiembre de 2012

Exportar data de gridview a PDF en ASP.NET 2008 con ItextSharp

En otros post he puesto ejemplos de como crear un word o un excel a partir de un gridview. Ahora haremos lo mismo para convertir a PDF ya que en ASP.NET no tenemos una caracteristica directa para exportar data del gridview a PDF por esa razon aqui voy a usar una referencia a la libreria ITextSharp. La dll esta disponible busquenla con este nombre itextsharp.dll, crean un proyecto web en visual studio y agregan la referencia al dll asi.
Lo seleccionamos y pulsamos Aceptar.
Ahora en nuestra hoja agregamos una tabla de 2 filas y una columna, en la primera fila agregamos un control ImageButton y en el segundo agregamos un GridView. A nuestro ImageButton le vamos a dar de fondo una imagen PDF para que se vea mas amigable para el usuario, luciendo asi:
para darle este fondo vana la propiedad imageUrl y seleccionan la imagen que debe estar dentro de su proyecto. A nuestro GridView en las propiedades AllowPaging y AllowSorting las ponemos en true y AutoGenerateColumns lo ponemos en false.
Ahora agregamos un SQLDataSource debajo de nuestro gridview:
Configuramos origen de datos y para este ejemplo utilizaremos los campos CompanyName, ContactName, ContactTitle y Address de la tabla Suppliers de la Base Northwind. Pueden hacer select * desde el DataSource, enlazamos al gridview en la propiedad DataSourceID y luego eliminamos las columnas que no deseamos:
Editamos nuestra cadena de conexion del Web.config

        
    
ahora a nuestra ventana de codigo agregamos estas referencias:
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html.simpleparser;

y agregan este codigo debajo del load:
public override void VerifyRenderingInServerForm(Control control)
    {
        /* Verifies that the control is rendered */
    }
    protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
    {
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=UserDetails.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
 hw.Write("<b><u>Employee Information</u></b><br/> <br/>");
        GridView1.AllowPaging = false;
        GridView1.DataBind();
        GridView1.RenderControl(hw);
        GridView1.HeaderRow.Style.Add("width", "15%");
        GridView1.HeaderRow.Style.Add("font-size", "10px");
        GridView1.Style.Add("text-decoration", "none");
        GridView1.Style.Add("font-family", "Arial, Helvetica, sans-serif;");
        GridView1.Style.Add("font-size", "8px");
        StringReader sr = new StringReader(sw.ToString());
        Document pdfDoc = new Document(PageSize.A4, 18f, 18f, 18f, 18f);
        HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        pdfDoc.Open();
        htmlparser.Parse(sr);
        pdfDoc.Close();
        Response.Write(pdfDoc);
        Response.End();
    }
para este ejemplo descargue el itextsharp.dll la version 4.1.2.0. Se agrego la funcion VerifyRenderingInServerForm para evitar que aparezca este error RegisterForEventValidation can only be called during Render();. Espero les haya servido el codigo.

0 comentarios:

Publicar un comentario