Categorías
Desarrollo

Generación de ficheros de PDF en Java: migrando de JODReports a XDocReport

De JODReports a XDocReport: te contamos el pequeño viaje que iniciamos cuando comenzamos a migrar algunas generaciones de PDFs que realizábamos desde Java.

Java es un lenguaje muy extendido en los entornos empresariales, donde la generación de informes y documentos en PDF es una necesidad constante.

Por ello, JODReports nos ayudó mucho hace unos años, y sigue haciéndolo, pero la necesidad de contar con soluciones más livianas y de bajo impacto en la infraestructura nos llevó a comenzar a migrar a XDocReport.

Aquí os contamos las virtudes que nos ha supuesto este cambio.

De JODReports…

Java OpenDocument Reports, es una solución para crear documentos de oficina e informes en formato OpenDocument Text a partir de plantillas que se pueden componer visualmente utilizando el procesador de texto OpenOffice.org Writer. Estos documentos se pueden convertir opcionalmente a otros formatos como PDF, Word y RTF con JODConverter.

Sus principales características son:

  • Las plantillas son archivos de texto OpenDocument (ODT).
  • Reemplazo de campo dinámico.
  • Sustitución de una imagen incrustada.
  • JODReports se basa en el popular lenguaje de plantillas FreeMarker.
  • Los datos que se fusionarán en la plantilla se pueden suministrar como:
    • Un mapa simple de variables.
    • Un modelo de objetos de Java.
    • Plantillas XML.
  • Se proporciona soporte especial para aplicaciones web, incluida la integración con el marco Spring MVC.
  • Con licencia bajo los términos de la LGPL, lo que básicamente significa que es de uso gratuito tanto en proyectos de código abierto como comerciales.

Cambiamos a XDocReport

XDocReport es un API Java open-source (licencia MIT) que permite generar informes en diversos formatos (PDF, XHTML) mergeando documentos/plantillas creados MS Office (.docx), OpenOffice (.odt) o LibreOffice (.odt) con un modelo Java.

¿Qué ganamos con este cambio?

  • Comparte las mismas caracteristicas, no perdemos ninguna herramienta con el cambio, ni quitamos potencia al proyecto. Ambos trabajan con la libreria iText y se integran con
    frameworks como Spring MVC.
  • No necesitamos un servidor OpenOffice activo, lanzar peticiones para generar documentos, abrir/cerrar conexiones… Evitando así problemas de servidor caído o de conexion.
  • Eliminamos servidores de OpenOffice por entornos reduciendo la carga de nuestro sistema. También nos facilita el proceso de migración de aplicaciones a Google Cloud, objetivo en el que estamos inmersos.
  • Evitamos problemas de apertura y cierre de etiquetas del XML con los diversos cambios de formatos que provocaban errores a nivel de plantilla, en ocasiones ilocalizables. Permite formatear el documento con más sencillez y rapidez.
  • Se integra con frameworks como Spring MVC: https://github.com/opensagres/xdocreport/wiki/XDocReportSpringMVC

¿Cómo trabajamos con XDocReport?

  • En mi plantilla creo variables (con sintaxis Velocity o FreeMarker), en este caso $name.
  • Cargo la plantilla y sobre mi contexto sustituyo mi variable para generar otro documento ODT.
  • Genero el documento en el formato adecuado, PDF en este caso.

Principal dificultad superada

  • La inclusion de imagenes como objeto a la plantilla. Solventamos con generación de imagenes independiente y incrustando al final de la creación del documento. Realizamos un almacenamiento temporal, borrando la carga de imagenes después de finalizar el documento.

¿Y vosotros qué solución para generar o convertir a PDF utilizáis? Contadnos vuestras experiencias 😉