Productividad B2B / generacion documental

Generador Profesional de Documentos PDF

Sistema de templates reutilizables para producir PDFs con calidad de impresion (planes, guias, catalogos) a partir de fotos, notas y datos — sin abrir Word, sin diseñador.

WeasyPrintPyMuPDFHandlebarsNode.jsPythonHTML/CSS
Antes de nosotros

El Reto

El cliente recibia notas a mano por WhatsApp y necesitaba convertirlas en documentos PDF profesionales: planes de bienestar personalizados, guias educativas, catalogos de productos. El flujo previo era HTML plano armado manualmente cada vez — sin templates, sin imagenes incrustadas, sin diseño consistente, sin posibilidad de iterar rapido.

El reto no era solo generar un PDF: era construir una libreria de templates reutilizables con calidad visual tipo Canva (Google Fonts, gradientes, sombras, SVGs) que pudieran combinarse con datos dinamicos (JSON) o quedarse como documento estatico. Y todo debia funcionar offline en Windows — sin depender de servicios externos ni de un navegador headless cada vez.

Caso especialmente complejo: en Windows, las dependencias GTK3/Pango que requiere WeasyPrint no se encuentran en PATH al importar Python. Habia que cargar las DLLs explicitamente desde la ruta de MSYS2 antes de importar el modulo, sin lo cual el render fallaba.

Lo que construimos

La Solucion

Construimos un workspace de templates HTML/CSS + un pipeline Python para renderizar cualquier template a PDF impresion-ready. Cada template vive en su propia carpeta con sus assets, y se puede regenerar en segundos cambiando los datos JSON de entrada.

Stack hibrido: Node.js compila los templates con Handlebars (inyectar datos en HTML), Python (WeasyPrint) renderiza el HTML a PDF con soporte de CSS Grid, Flexbox, @page rules, page-break-* y print-color-adjust. Para editar PDFs existentes (insertar texto, agregar imagenes a documentos ya generados) usamos PyMuPDF — sin recrear desde cero.

Las imagenes de WhatsApp se incrustan como base64 directamente en el HTML, lo que produce PDFs autocontenidos faciles de compartir. Cada documento se organiza en su subcarpeta con el ultimo PDF nombrado limpio + previews PNG + carpeta versions/ con historico fechado.

Funcionalidades

Features Clave

Libreria de Templates Reutilizables

Templates HTML/CSS que se guardan una vez y se reutilizan: plan-bienestar (4 paginas A4, datos via JSON), guia-bienestar (2 paginas estatica), catalogo de productos. Cada template lleva sus fonts, colores y assets propios.

Render WeasyPrint con Calidad de Impresion

WeasyPrint convierte HTML/CSS a PDF respetando @page (A4, margenes), saltos de pagina (page-break-after, page-break-inside), Google Fonts via @font-face y colores forzados con print-color-adjust: exact. Sin navegador, sin Playwright.

Edicion de PDFs Existentes con PyMuPDF

PyMuPDF (fitz) permite insertar texto, imagenes y modificar PDFs ya generados sin recrearlos. Cambios pequeños en segundos; rediseño completo cae al pipeline HTML/CSS + WeasyPrint.

Datos Dinamicos con Handlebars

Los templates con variables se compilan inyectando un JSON de datos. Para el plan de bienestar, basta editar plan.json (peso, objetivos, productos, plan de comidas) y regenerar — el PDF queda personalizado en menos de 5 segundos.

Imagenes Incrustadas en Base64

Fotos de WhatsApp se convierten a base64 y se inyectan inline. PDFs autocontenidos, sin paths rotos al compartir, listos para enviar por correo o WhatsApp.

Organizacion Automatica del Output

Cada tipo de documento tiene su subcarpeta. El PDF mas reciente siempre se llama igual (sin fecha) para encontrarlo facil; las versiones anteriores se mueven a versions/[fecha].pdf. Previews PNG en su propia carpeta. Nada queda suelto.

Screenshots

Como se Ve

Screenshot

Plan de Bienestar Personalizado (4 paginas A4)

Template con portada de marca, evaluacion de composicion corporal Omron, productos recomendados con imagenes, plan de comidas semanal y notas finales. Generado desde JSON en 3 segundos.

Screenshot

Guia Educativa de Bienestar (2 paginas)

Template estatico con seccion sobre proteina, calorias, productos y como tener resultados. Tipografia editorial, iconos SVG, gradientes de marca — sin emojis.

Screenshot

Pipeline de Generacion en Terminal

Comando node scripts/generate-pdf.js con nombre del template y ruta del JSON. Salida: HTML compilado intermedio, PDF final en output/[nombre]/[nombre].pdf, previews PNG opcionales.

Screenshot

Estructura del Workspace

Carpeta templates/ con cada template aislado (plan-bienestar, guia-bienestar, catalogo). Carpeta input/ por solicitud, output/ organizada por tipo de documento. Sin archivos sueltos.

Stack

Detalles Tecnicos

ComponenteTecnologia
TemplatingHandlebars (variables + helpers + partials)
Render PDFWeasyPrint (Python) — HTML/CSS a PDF impresion-ready
Edicion PDFPyMuPDF / fitz (insertar texto, imagenes, anotaciones)
Runtime templatesNode.js 20+
GTK3/Pango (Windows)MSYS2 + os.add_dll_directory antes de importar WeasyPrint
DiseñoHTML5 + CSS3 (Grid, Flexbox, @page, Google Fonts via @font-face)
ImagenesBase64 inline para PDFs autocontenidos
RespaldoPlaywright headless (solo si WeasyPrint no soporta algo)
Metricas reales

Resultados

3+

Templates listos para reutilizar

<5 seg

Tiempo de regeneracion de un PDF

~800 KB

Tamaño promedio del PDF de plan

Tipo Canva, impresion-ready

Calidad

Cero (offline-first)

Dependencia de internet

¿Generas el mismo documento todas las semanas, siempre desde cero?

Te armamos una libreria de templates reutilizables con calidad de impresion. Cambias los datos, regeneras en segundos.