miércoles, 26 de octubre de 2011

Exportar Reporte rdlc a Pdf en C# y mostrarlo a través de un Label

Si queremos mostrar un reporte rdlc directamente en pdf en nuestra página sin usar el ReportViewer lo que podemos hacer es lo siguiente.

En la página aspx solo basta con poner este label
reporte.aspx

<asp:Label ID="lblReporte" Text="" runat="server"></asp:Label>


Y el reporte lo cargamos de la siguiente manera          
reporte.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
      DataTable datos = DatosParaElReporte();
      String pathReporte = "repDeudas.rdlc"
      RenderReport(pathReporte, datos)
}

private void RenderReport(string pathReporte, DataTable datos) 
{
  try
  {
     LocalReport localReport = new LocalReport();
     localReport.ReportPath = Server.MapPath(pathReporte);
     ReportDataSource rdsCabecera = new ReportDataSource("DataSet1", datos);
     localReport.DataSources.Add(rdsCabecera);
     string reportType = "PDF";
     string mimeType;
     string encoding;
     string fileNameExtension;
     Warning[] warnings;
     string[] streams;
     byte[] renderedBytes;

     //Render
     renderedBytes = localReport.Render(
     reportType, 

     //deviceInfo,
     null,
     out mimeType,
     out encoding,
     out fileNameExtension,
     out streams,
     out warnings);
   

     String filePath = MapPath(
"rpMiReporte.pdf");
     FileStream fs = new FileStream(filePath, FileMode.Create);
     fs.Write(renderedBytes, 0, renderedBytes.Length);
     fs.Close();
     lblReporte.Text = "<object id=\"objPdf\" type=\"application/pdf\"  data=\"" 

              + nombre + "\" style=\"width: 980px; height: 100%;\" >  ERROR (no 
              puede mostrarse el objeto)</object>";
                    }
     catch (Exception ex)
     {

        lblReporte.Text = ex.Message;
     }
}


Listo ahora el reporte ser carga en un pdf y se muestra en pantalla a través del label, esto es útil si hemos pasado por la experiencia de usar el ReportViewer en Firefox o Chrome donde este componente no muestra el boton de imprimir entonces reemplazamos el ReportViewer por el visor pdf de adobe y imprimimos directamente de ahi.

8 comentarios:

  1. y que datos debe tener DatosParaElReporte();

    ResponderEliminar
  2. DatosParaElReporte() es básicamente una función que realiza una consulta a la base de datos y retorna un DataTable con el resultado de la consulta.

    ResponderEliminar
  3. Amigos Tengo una duda, he colocado el código en mi página pero me dice en la parte del reporte <<.rdlc' es una ruta de acceso física, pero se esperaba una ruta de acceso virtual.>>, he colocado la dirección donde está el reporte, solo el nombre he probado mil y una formas, me podrían indicar cuál es mi error, de ante mano Gracias.

    ResponderEliminar
  4. si es el path de tu archivo .rdlc debería funcionar sin problemas, podrías enviarme tu proyecto para revisarlo.

    ResponderEliminar
  5. Hola he implementado el codigo pero me manda un error cuando asigno el codigo al lblReporte.Tex
    Especificamente que debo asignar o que va en la pate "+ nombre +" del codigo que llena el label no veo si es una variable donde se asigna.. de hecho la palabra "nombre" solo aparece en este extracto de este codigo que llena el label
    lblReporte.Text

    ResponderEliminar
    Respuestas
    1. Hola Santiago "nombre" es solamente el nombre del pdf que vas a generar por ejemplo puedes reemplazarlo por mireporte.pdf

      Eliminar
  6. Gracias por contestar Leonel
    Termine haciendo unos ajustes y convenciones vb.net y me funciona muy bien.
    Gracias!

    ResponderEliminar
    Respuestas
    1. Me alegro que te haya funcionado Santiago.. Saludos!

      Eliminar