1 December, 2007

Lanzando informes jasperreports “pdf / xls” desde un servlet

Amiguetes, por aquí seguimos probando y reprobando informes jasperreports. Hoy dejaré un par de apuntes de código que muestran como generar el informe final en pdf o xls teniendo ya el informe diseñado en un fichero .jasper, yo lo he hecho con el ireport, ¿alguien se atreve a hacerlo a mano?, por cierto, y ahora que nadie nos ve, habéis oído hablar de jarvis?, intentaré seguirlo de cerca, parece un plugín para generar informes jasperreport gráficamente en netbeans, pero todavía esta en betas. No me enrollo mas vamos al meollo:

A un informe jasper podremos pasarle tantos parametros como necesitemos para ello debemos crear un Hastable para luego pasarlo como parámetro en la generación del informe:

  1. Map parameters = new HashMap ();
  2. //A nuestro informe de prueba le vamos a enviar la fecha de hoy
  3. parameters.put ("fechainicio", new Date() );

Para exportar a formato pdf:

  1. ServletOutputStream out;
  2. // Creamos un objecto jasper con el fichero previamente compilado
  3. JasperReport jasperReport = (JasperReport)JRLoader.loadObject ("/javi/InformeDemo.jasper");
  4.  
  5. // Generamos el informe pasandole como parametros el objecto creado anteriormente jasperReport, parameters que es el hashmap
  6. // creado anteriormente con todos los parametros que necesitemos enviarle al informe y conn una conexión activa con vuestro
  7. // servidor de BD
  8. byte[] fichero = JasperRunManager.runReportToPdf (jasperReport, parameters, conn);
  9.  
  10. // Y enviamos el pdf a la salida del navegador como podríamos hacer con cualquier otro pdf
  11. response.setContentType ("application/pdf");
  12. response.setHeader ("Content-disposition", "inline; filename=informeDemo.pdf");
  13. response.setHeader ("Cache-Control", "max-age=30");
  14. response.setHeader ("Pragma", "No-cache");
  15. response.setDateHeader ("Expires", 0);
  16. response.setContentLength (fichero.length);
  17. out = response.getOutputStream ();
  18.  
  19. out.write (fichero, 0, fichero.length);
  20. out.flush ();
  21. out.close ();

Y esta vez probaremos también a generarlo como un xls para excell:

  1. int bit;
  2. File f;
  3. ServletOutputStream out;
  4.  
  5. JasperPrint jasperPrint=JasperFillManager.fillReport ("/javi/InformeDemo.jasper", parameters, conn);
  6. String xlsFileName = "informeDemo.xls";
  7.  
  8. //Creacion del XLS
  9. JRXlsExporter exporter = new JRXlsExporter ();
  10. exporter.setParameter (JRExporterParameter.JASPER_PRINT, jasperPrint);
  11. exporter.setParameter (JRExporterParameter.OUTPUT_FILE_NAME, xlsFileName);
  12. exporter.setParameter (JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
  13. exporter.exportReport ();
  14.  
  15. // En este punto ya esta Creado el XLS
  16. // Ahora leemos el fichero y forzamos al navegador a que nos descargue el fichero.
  17. f = new File ( xlsFileName);
  18.  
  19. response.setContentType ("application/vnd.ms-excel"); //Tipo de fichero.
  20. response.setHeader ("Content-Disposition", "attachment;filename=\"" + xlsFileName + "\""); //Configurar cabecera http
  21.  
  22. in = new FileInputStream (f);
  23. out = response.getOutputStream ();
  24.  
  25. bit = 256;
  26. while ((bit)>= 0)
  27. {
  28.    bit = in.read ();
  29.    out.write (bit);
  30. }
  31.  
  32. out.flush ();
  33. out.close ();
  34. in.close ();

Y esto ha sido todo por hoy, todavía me queda mucha estadística que machacar, para la próxima mas!

31 Comments »

RSS feed for comments on this post. TrackBack URL

Leave a comment

Para proteger este sitio del dichoso spam responde a esta pregunta y antes de enviar tu comentario

Powered by WordPress
Bajo licencia Creative Commons
Contacto sanroman.javier at gmail.com