Generar informe Jasper Report con Beans desde Java
Una vez crear un informe Jasper Report con Java Bean, vamos ahora a usarlo desde nuestro código Java con nuestros datos. Necesitamos
- Crear un
JRBeanCollectionDataSource
- Compilar nuestro fichero
jrxml
generado por Jasper Studio - Rellenar el informe con datos llamando a
JasperFillManager.fillReport()
- Previsualizar/Salvar el informe.
El código completo sería el siguiente
public static void main(String[] args) throws JRException, UnsupportedEncodingException {
// Crear un objeto JRBeanCollectionDataSource para proporcionar los datos al informe
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(FactoryBean.create());
// Compilar el informe a partir del archivo .jasper
JasperReport report = JasperCompileManager.compileReport(
"src/main/files/ReportExampleBean.jrxml");
// Parámetros, si los tienes
HashMap<String, Object> params = new HashMap<>();
// Generar el informe
JasperPrint jasperPrint = JasperFillManager.fillReport(report, params, dataSource);
// Mostrar el informe en una ventana
JasperViewer.viewReport(jasperPrint);
// Salvarlo en fichero
JasperExportManager.exportReportToPdfFile(jasperPrint, "target/report.pdf");
}
Veamos detalles, nos saltamos lo más estándar que puedes ver en Ejemplo básico con Jasper Report
JRBeanCollectionDataSource[editar]
Instanciamos la clase JRBeanCollectionDataSource
. Solo necesitamos pasarle como parámetro una Collection<Bean>
. En el código de ejemplo lo hacemos llamando a una clase FactoryBean.java que nos hemos hecho para crear una lista de Bean
.
Por supuesto, en tu código puedes hacerlo como quieras. Lo importante es pasar en el constructor de JRBeanCollectionDataSource
una Collection<Bean>
con tus beans.
JasperFillManager.fillReport()[editar]
Aquí se pasan al informe los datos, en concreto, la fuente de beans que acabamos de instanciar, es decir, la instancia de JRBeanCollectionDataSource
.
Aquí lo importante es que da igual que clase Bean metas. No tiene por qué ser la misma con la que creaste la plantilla en Jasper Studio. Lo único importante es que tus beans tengan los mismos campos que espera Jasper.
Cuando creamos el informe con Beans en Jasper Studio, pusimos una clase de nombre Bean
con dos campos String
"name" y "mail" y un campo de tipo java.util.Date
de nombre "birdthday". Los beans que metas en código no tienen que ser esto, solo tienen que tener estos tres campos y de estos tipos.
JasperViewer.viewReport()[editar]
Con esta llamada previsualizamos el informe, que quedaría similar a