martes, 18 de enero de 2011

Exportar pdf desde crystal sin usar crystal report viewer

Siguiendo con este blog, y con deseos que no muera, recorde la programación de reportes con crystal, en mi actual trabajo no los utilizan pero durante años los use y hacian mas amena la vida, sobre todo con reportes complejos, sin embargo me encontre con un problema cuando comenze a trabajar en web, y es que el crystal report viewer para Asp .Net era algo tedioso de configurar y consumia tiempo en detalles inverosimiles, por ende preferí exportar inmediatamente el reporte a pdf y mostrarlo desde la pagina, obviamente hay que hacer pruebas una vez puesta la solucion en producción ya que la exportación se ve afectada por los tamaños de pagina guardados en el servidor, pero el trabajo pienso que es mínimo una vez teniendo listo lo anterior, bueno pues despues de esta breve introducción let's fun programming!!!

Comenzaremos, creando un sitio web con el nombre Generar Pdf, en mi caso lo realize con vs 2008 apuntando al Net framework 2.0, en el webform Default ingresamos un TextBox llamado txtMostrar y un boton:




Dentro de la pagina creamos una función en javascript la cual tomara los datos de la caja de texto y posteriormente los mandara a la pagina que nos abrira el pdf

function mandaReporte()
{
 var txt = document.getElementById('txtMostrar');
 if(txt.value!='')
 {
   abrir('Default2.aspx?par='+txt.value,600,600,600,600,false);
 }
 else
 {
   alert('escribe algo');
 }        
 return false;
}
function abrir(pagina, ancho, alto, izquierda, arriba, sustituir) {            
 var ventana = window.open(pagina, "venta", 'location=no,menubar=no,status=no,toolbar=no,resizable=yes,scrollbars=yes',sustituir);
}

Una vez hecho esto integramos la pagina Default2.aspx en la cual mandaremos a traer el reporte hecho en crystal y lo mandara a exportar, tambien generamos la carpeta temp dentro de nuestro proyecto, que es donde se pondran los reportes para ser mostrados y la carpeta debe tener permisos para escritura lectura con la cuenta de asp del server donde lo instalen, el reporte fue previamente realizado y como esta en crystal es tema de otro post jeje, en fin en el behind de la pagina Default2.aspx pondremos lo siguiente:
protected void Page_Load(object sender, EventArgs e)
{
   string prueba = Request.QueryString["par"].ToString();
   DataTable tb = new DataTable();
   tb.Columns.Add("prueba",typeof(string));
   DataRow dr = tb.NewRow();
   dr["prueba"] = prueba;

   CrystalDecisions.CrystalReports.Engine.ReportDocument myReportDocument = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
   myReportDocument.Load(Server.MapPath("~\\CrystalReport.rpt"));
   myReportDocument.SetDataSource(tb);


   Response.Buffer = false;
   Response.ClearContent();
   Response.ClearHeaders();
   //sakamos el nombre para el pdf
   string NombreExport = "ReportePrueba" + prueba + "_" + DateTime.Now.ToShortDateString().Replace('/', '_') + "";        //akamos la path a exportar
   //le ponemos la extención
   NombreExport += ".pdf";
   string path = Server.MapPath("~\\tem");
   path += "\\" + NombreExport ;
   //exportamos a pdf
   myReportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, path);
   //redirijimos l pagina a el pdf
   string sRdireccion = "~\\tem";//
   sRdireccion += "\\"+NombreExport ;
   Response.Redirect( sRdireccion);
}

Traemos por el querystring el dato a imprimir, buscamos el reporte a imprimir y realizamos los metodos para la exportación a pdf grabando el reporte en nuestro proyecto, despues simplemente hacemos un redirect a donde se encuentre nuestro proyecto, es todo, realmente sencillo, cualquier cosa se aceptan sugerencias y comentarios, asi como adjunto el proyecto para descarga, saludos;

Generar Pdf Crystal....

No hay comentarios: