Generar PDFs desde Next.js con pdf-lib: propuestas y acuerdos automáticos
Cómo construí un generador de propuestas y acuerdos en PDF dentro de una Server Action de Next.js, sin servicios externos ni HTML-a-PDF pesado.
- #pdf-lib
- #next.js
- #server-actions
- #automatizacion
Cada propuesta comercial que mando como freelance necesitaba antes media hora en un editor de diseño. Con un pequeño generador propio, ese proceso se convirtió en rellenar un formulario y descargar un PDF con la marca ya aplicada. La pieza clave: pdf-lib corriendo directamente en una Server Action.
Por qué pdf-lib y no HTML-a-PDF
Herramientas como Puppeteer para convertir HTML a PDF son pesadas: necesitan un navegador headless, no funcionan bien en runtimes serverless o edge, y el resultado es difícil de controlar al pixel. pdf-lib construye el PDF de forma programática — texto, posiciones, fuentes embebidas — sin depender de un motor de renderizado de navegador.
La arquitectura
Una Server Action recibe los datos del formulario (cliente, servicios, importe), construye el documento con pdf-lib a partir de una plantilla con posiciones fijas, y devuelve el PDF como buffer para descarga directa. Sin servicio externo, sin colas, sin coste por generación.
El reto real: maquetación programática
Sin motor de layout automático, cada bloque de texto necesita su posición X/Y calculada a mano. Para textos de longitud variable (como la descripción del servicio), controlo el ancho máximo y hago wrap manual calculando el ancho de cada palabra con la fuente embebida antes de dibujar la línea.
Conclusión
Para documentos con una plantilla fija y repetible — propuestas, acuerdos, facturas simples — pdf-lib en una Server Action es más rápido, más barato y más fácil de mantener que montar un servicio externo de generación de PDF. La curva de aprendizaje de la maquetación manual se paga con cada documento generado en segundo y medio.
¿Construyendo algo?
Si esto te ha resonado, podemos hablar. Contactar →