Exportar reportes a PDF desde código

A partir de Visual Studio 2005, se incluyeron nuevos controles (ReportViewer) y clases (LocalReport, ServerReport, etc) con los cuales se pueden diseñar reportes tanto para aplicaciones de escritorio como para aplicaciones Web.

Una característica útil de estas nuevas clases, al igual que los reportes diseñados en Crystal Reports, es que permiten automatizar el proceso de conversión de los reportes a diferentes a diferentes formatos: MS Excel, PDF e Imagenes (en formato TIFF).

Revisando documentación acerca de este conjunto de clases encontré un ejemplo publicado por Raj Kaimal que justamente exporta los reportes a formato PDF desde ASP.NET usando el método Render de la clase LocalReport:

csharp:
private void RenderReport()
{
    LocalReport localReport = new LocalReport();
    localReport.ReportPath = Server.MapPath("~/Productos.rdlc");

    ReportDataSource reportDataSource = new ReportDataSource("Ejemplo_Productos", GetData());
    localReport.DataSources.Add(reportDataSource);

    string reportType = "PDF";
    string mimeType;
    string encoding;
    string fileNameExtension;
   
    //The DeviceInfo settings should be changed based on the reportType
    //http://msdn2.microsoft.com/en-us/library/ms155397.aspx
    string deviceInfo =
    "<DeviceInfo>" +
    "  <OutputFormat>PDF</OutputFormat>" +
    "  <PageWidth>8.5in</PageWidth>" +
    "  <PageHeight>11in</PageHeight>" +
    "  <MarginTop>0.5in</MarginTop>" +
    "  <MarginLeft>1in</MarginLeft>" +
    "  <MarginRight>1in</MarginRight>" +
    "  <MarginBottom>0.5in</MarginBottom>" +
    "</DeviceInfo>";

    Warning[] warnings;
    string[] streams;
    byte[] renderedBytes;
   
    //Render the report
    renderedBytes = localReport.Render(
        reportType,
        deviceInfo,
        out mimeType,
        out encoding,
        out fileNameExtension,
        out streams,
        out warnings);
   
    Response.Clear();
    Response.ContentType = mimeType;
    Response.AddHeader("content-disposition", "attachment; filename=productos." + fileNameExtension);
    Response.BinaryWrite(renderedBytes);
    Response.End();
}

En la primera porción de código resaltada, reportType puede tomar los siguientes valores: PDF, Excel o Image; los valores para deviceInfo varían de acuerdo al formato que se use y están documentados en MSDN

Por si alguien está interesado, he preparado un pequeño ejemplo basado en el código mostrado.

6 thoughts on “Exportar reportes a PDF desde código”

  1. gracias por tus aportaciones amigo muy buen ejemplo, te importaria si lo publicar en visual basic tambien, gracias y saludos

  2. Buenas tengo un problema que a lo mejor ustedes saben como resolver, estoy creando un Report en 2005 con ReportViewer y tengo mi DataSet que viene de la base de datos..el problema se produce cuando intento cargar un dato en el Report, por ejemplo en un campo, que viene del dataSet, pero de segundo nivel, es decir que no esta directamente en el dataSet sino que esta integrado en un "grupo" dentro del dataSet, se lo explico graficamente a ver si soy capaz de explicarme bien..el campo1 funciona perfectamente sin embargo el campo dos al meterlo en el report me sale en blanco.Muchas gracias por su interes. Un saludo

    MiDataSet
    |
    Campo 1
    |
    Grupo 1 - Campo2
    |
    Campo 3
    |
    Campo 4....

    Si fuera posible preferiria que me respondieran a mi email...jmvsr@hotmail.com

Comments are closed.