Informes dinámicos con DynamicJasper

2
4045

Cómo generar informes al vuelo mediante DynamicJasper

Índice de contenidos

1. Introducción

Hoy en día es muy común que por pequeña que sea nuestra aplicación tengamos que generar algún tipo de informe. En el mundo Java existe un estándar de facto llamado JasperReports, ampliamente extendido. Si bien generar un informe al vuelo con JasperReports es técnicamente posible, requiere de un exhaustivo conocimiento de la herramienta, su comportamiento y posibilidades.
Para simplificar esa tarea y ayudarnos en la medida de lo posible, disponemos de un framework llamado DynamicJasper, que apoyándose en JasperReports, oculta su complejidad y nos permite realizar informes profesionales de una manera muy sencilla.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro Retina 15″ (2.2 Ghz Intel Core I7, 16GB DDR3).
  • Sistema Operativo: Mac OS Yosemite 10.10
  • Entorno de desarrollo: IDEA IntelliJ 16.01 EAP
  • Maven 3.3.9
  • Flyway
  • PostgreSQL 9.5.1

3. Creación del proyecto con Maven

Lo primero que necesitamos es importar la librería de DynamicJasper. Optamos por la manera más sencilla, que es crearnos un proyecto Maven, en el que incluimos el repositorio de DynamicJasper y su dependencia:

...
  <repositories>
    <repository>
      <id>fdvsolution.public</id>
      <url>http://nexus.fdvs.com.ar/content/groups/public/</url>
    </repository>
  </repositories>
  ...
  <dependencies>
    ...
    <dependency>
      <groupId>ar.com.fdvs</groupId>
      <artifactId>DynamicJasper</artifactId>
      <version>5.0.2</version>
    </dependency>
    ...
  </dependencies>
...

Con esta sencilla configuración ya estamos listos para utilizar DynamicJasper en nuestro proyecto.

4. Nuestro primer informe

La estructura de nuestro primer informe va a ser muy sencilla. Va a constar de un encabezado de página, un subtítulo que indique la fecha y hora de generación y una linea de detalle en la que mostrar nuestra información.

Lo que a priori parece sencillo, utilizando JasperReports directamente supondría realizar tareas de configuración del informe, definición de elementos, gestión de bandas de impresión, parámetros, etc. Ahora veremos como queda resuelto con este framework.

Para el caso que nos ocupa, vamos a dividir nuestro proyecto en datasource, exporter y clase principal. Únicamente vamos a comentar las clases de generación y exportación del informe. Para el resto del proyecto, podéis importarlo desde el repositorio de GitHub aquí.

public DynamicReport buildReport() throws ClassNotFoundException {
  FastReportBuilder fastReportBuilder = new FastReportBuilder();

  fastReportBuilder.addColumn("ID", "id", Long.class.getName(), 50)
    .addColumn("Nombre", "firstname", String.class.getName(), 200)
    .addColumn("Apellidos", "surname", String.class.getName(), 200)
    .addColumn("Fecha Incorporación", "startDate", String.class.getName(), 120)
    .addColumn("Salario", "salary", String.class.getName(), 120)
    .addColumn("Departamento", "department", String.class.getName(), 180)
    .setTitle("Mi primer Informe con DynamicJasper").setSubtitle("Generado el " + new Date())
    .setPrintBackgroundOnOddRows(true).setUseFullPageWidth(true);

  return fastReportBuilder.build();
}
public static void exportReport(JasperPrint jp, String path) throws JRException, FileNotFoundException {
  LOGGER.debug("Exporing report to: " + path);
  JRPdfExporter exporter = new JRPdfExporter();

  File outputFile = new File(path);
  File parentFile = outputFile.getParentFile();
  if (parentFile != null) parentFile.mkdirs();
  FileOutputStream fos = new FileOutputStream(outputFile);

  exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
  exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, fos);

  exporter.exportReport();

  LOGGER.debug("Report exported: " + path);
}

Como podemos ver, la generación de informes sencillos de manera dinámica no podría ser más simple. Sólo tenemos que instanciar el builder que nos proporciona DynamicJasper, ir añadiendo las columnas que necesitemos en el orden de salida, títulos y demás propiedades. La exportación se delega a los métodos de JasperReports, ya que lo que obtenemos es un objeto JasperPrint.

5. Conclusiones

Si bien hemos conseguido generar un informe muy simple, DynamicJasper nos brinda multitud de posibilidades a la hora de trabajar con reports. Podemos gestionar virtualización, grupos, layouts, tablas, estilos, subreports, plantillas, etc. con la misma facilidad que este pequeño informe. Merece la pena dedicar un tiempo a revisar todas las posibilidades que nos ofrece esta librería.

6. Referencias

2 COMENTARIOS

  1. Buen artículo!
    DynamicJasper trae una dependencia jar (DynamicJasper-core-fonts) que trae la fonts más comunes, entre ellas «Arial».
    Por otro lado, DynamicJasper ya esta disponible en el repositorio central de maven, por lo que no hace falta agregar el repo en el pom

    Saludos

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad