Ir al contenido

Generador de Documentos

Este nodo genera un documento (PDF o HTML) combinando una plantilla diseñada en la sección Plantillas con el payload del workflow. El render no usa dependencias externas ni servicios de pago.

Toma la plantilla (por template_id o inline), resuelve las variables {{data.campo}} con el payload y dibuja el documento. Guarda siempre una copia en disco y, opcionalmente, persiste el documento para servirlo por una URL con token.

CampoTipoRequeridoDescripción
template_idSelector de plantillaNo*Plantilla guardada en la sección Plantillas. El + crea una nueva.
output_formatSelectNopdf (def.), html o both.
outputSelectNourl (def.): persiste y devuelve enlace. base64: embebe el documento.
filenameTextoNoNombre de archivo. Admite variables, ej. ficha_{{data.referencia}}.
ttl_hoursNúmeroNoCaducidad del enlace (solo modo URL).
template_jsonTextarea (avanzado)No*Plantilla de bloques inline, si no usás una guardada.

* Requerido template_id o template_json.

{
"document": {
"url": "http://tu-engine/d/doc/<token>",
"token": "<token>",
"path": "/ruta/local/al/archivo.pdf",
"file_url": "http://tu-engine/download/cli_2/archivo.pdf",
"filename": "ficha_R-100.pdf",
"mimetype": "application/pdf",
"bytes": 24567
},
"filename": "ficha_R-100.pdf",
"path": "/ruta/local/al/archivo.pdf"
}
  • document.url — enlace /d/doc/:token servido por el engine (no por la app). No infla el estado del workflow.
  • document.path — ruta local del archivo generado (para adjuntar por email, FTP, etc.).
  • document.file_url — URL de descarga directa del archivo en disco.
{ "filename": "ficha_R-100.pdf", "mimetype": "application/pdf", "pdf_base64": "JVBERi0x..." , "path": "/ruta/local/..." }

La plantilla es un JSON con page, theme, header, footer y un array blocks. Tipos de bloque: titleBlock, section, fieldGrid, table, text, image, qr, divider, pageBreak. Cualquier bloque admite when (condicional). Detalle completo en la guía del Generador de Documentos.

{
"page": { "size": "A4", "orientation": "portrait", "margins": 40 },
"header": { "brand": "{{data.empresa}}", "title": "FACTURA", "refLine": "Nº {{data.numero}}" },
"footer": { "left": "Generado · {{now}}", "right": "Página {page} de {pages}", "pageNumbers": true },
"blocks": [
{ "type": "section", "title": "Cliente" },
{ "type": "fieldGrid", "columns": 2, "fields": [
{ "label": "Cliente", "value": "{{data.cliente}}" },
{ "label": "NIF", "value": "{{data.nif}}" }
]},
{ "type": "table", "from": "{{data.lineas}}", "zebra": true, "columns": [
{ "header": "Concepto", "path": "concepto", "width": 5 },
{ "header": "Importe", "path": "importe", "align": "right", "width": 1 }
]}
]
}
Siguiente nodoCaso de uso
sendMailAdjuntar el documento (por path) o enlazar url.
httpDevolver document.url como respuesta de una API.
ftp / s3Subir el archivo generado usando document.path.
dataStoreGuardar el enlace del documento para consultarlo luego.
  • El nodo corre en el worker de cola. Tras cambios en el engine, reiniciá el worker para que tome la versión nueva.
  • La document.url apunta al engine (donde vive la ruta /d/doc), no a la app.
  • Imágenes: se embeben JPEG; el QR se dibuja como vector.
  • htmlTemplate — render HTML con variables (sin PDF nativo).
  • barcodeGenerator — genera imágenes de código de barras/QR.
  • sendMail — envía el documento por correo.