Generar informe Jasper Report con Beans desde Java

De ChuWiki


Una vez crear un informe Jasper Report con Java Bean, vamos ahora a usarlo desde nuestro código Java con nuestros datos. Necesitamos

  1. Crear un JRBeanCollectionDataSource
  2. Compilar nuestro fichero jrxml generado por Jasper Studio
  3. Rellenar el informe con datos llamando a JasperFillManager.fillReport()
  4. 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

Previsualización del informe Jasper Reports con beans desde java
Previsualización del informe Jasper Reports con beans desde java