Reportes en JEE con Jasper Reports

Lo excitante de pertenecer al mundo JAVA  es encontrar infinidades de librerías listas para implementar.
Jasper Reports es indudablemente el “reporter” por excelencia. En esta documentación veremos un simple código para su utilización en JSF y PRIMEFACES.
Si proviene del mundo OOP seguramente construirá un patrón simple estilo “ReportFactory” para lanzar las instancias de cada reporte que necesitemos. No obstante en un entorno WEB no trabajamos de la misma manera que en un entorno SWING, por ejemplo.
En esta ocasión deberemos utilizar Stream de serialización binaria para que los datos viajen desde el servidor hacia el cliente. PrimeFaces provee una clase de tipo StreamedContent que debemos pasar desde nuestro BackingBean como una propiedad.
El siguiente método genera un reporte PDF online:

public StreamedContent getArchivoPDF(String path) throws JRException {

Connection conn = null;

String url = "jdbc:mysql://localhost:3306/";

String dbName = "DBNAME";

String driver = "com.mysql.jdbc.Driver";

String userName = "user";

String password = "pass";

try {

Class.forName(driver).newInstance();

conn = DriverManager.getConnection(url+dbName,userName,password);

System.out.println("Connected to the database");

} catch (Exception e) {}

InputStream inputStream = null;

Map parameters = new HashMap();

parameters.put("ALGUN_PARAMETRO",ID_PARAMETRO);

try{

ByteArrayOutputStream Teste = new ByteArrayOutputStream();

JasperReport jasperReport = (JasperReport)JRLoader.loadObject(getClass().getClassLoader().getResourceAsStream(path.trim()));

JasperPrint print = JasperFillManager.fillReport(jasperReport, parameters,conn);

JRExporter exporter = new net.sf.jasperreports.engine.export.JRPdfExporter();

exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, Teste);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);

exporter.exportReport();

inputStream = new ByteArrayInputStream(Teste.toByteArray());

}catch(JRException ex) {}

return new DefaultStreamedContent(inputStream,"application/pdf","nombre_archivo");

}

Anuncios