vruz.dev
Notas
Tutorial6 min

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 →