← Inicio
Success Story · Kotlin · Java · Spring Boot · AWS

Generación de PDF en entornos de microservicios

Un cliente quería ampliar su entorno de microservicios con la generación y distribución de documentos PDF – en varios idiomas, sin despliegues costosos y sin trampas de licencias.

Reto

Generar y distribuir documentos PDF – integrados en el entorno AWS existente del cliente.

Solución

Un microservicio propio genera los PDF a partir de plantillas HTML con Thymeleaf, Flying Saucer y OpenPDF y se conecta mediante REST.

Resultado

Las plantillas y las traducciones se pueden cambiar sin despliegue – con componentes cuya licencia permite el uso comercial.

Tecnología

Entra HTML, sale PDF

El proyecto utiliza Flying Saucer para convertir HTML en PDF. Por debajo puede usarse como librería PDF iText 5 u OpenPDF – los documentos resultantes son idénticos en tamaño y aspecto.

La recomendación fue OpenPDF: tiene licencia LGPL y puede usarse sin problemas en entornos comerciales. Además, el equipo de Flying Saucer dejó de dar soporte a iText 5 en mayo de 2024.

Integración

Cambiar sin desplegar

Un requisito clave: modificar plantillas PDF y traducciones sin tener que desplegar cada vez.

  • Un microservicio propio se encarga de generar los PDF.
  • Se conecta al entorno AWS existente mediante interfaces REST.
  • Las plantillas HTML y las traducciones se guardan en una base de datos y se cargan de forma dinámica.
Fuentes

La cuestión de licencias que se subestima

La fuente incrustada en los PDF requiere especial atención – sobre todo para otros alfabetos como el cirílico. Fuentes populares como Arial requieren licencia y pueden generar costes considerables.

La solución: la familia de fuentes gratuita Noto. Admite más de 800 idiomas y puede redistribuirse libremente bajo la SIL Open Font License.

Prototipo

Funcionando en GitHub

Hay un prototipo funcional disponible públicamente en GitHub. Entrega los PDF de forma síncrona y se puede adaptar fácilmente a una distribución asíncrona.

  • Java 21
  • Kotlin
  • Spring Boot
  • Spring Data
  • Hibernate
  • PostgreSQL
  • Docker
  • Docker Compose
  • Testcontainers
  • Rest Assured
  • JUnit
  • Maven
Contacto

Hablemos de su backend.

Escríbame brevemente de qué se trata. Le responderé personalmente y veremos juntos si puedo ayudarle y cómo.

Retrato de Christoph Sens
Christoph SensSu contacto directo