Documentación: Nodo Generar PDF (Generate PDF)¶
Descripción General¶
El Nodo Generar PDF (Generate PDF) es un nodo de acción que construye un documento PDF a partir de un modelo de bloques (encabezado, contenido y pie de página) definido visualmente. Permite generar reportes con texto, tablas, listas, imágenes, separadores, códigos QR/barras y saltos de página, con control de tamaño de página, orientación, márgenes y fuente.
En entornos IoT e industriales es ideal para producir reportes automáticos: actas de incidentes, partes de mantenimiento, resúmenes de eventos o informes de turno, generados al vuelo con datos del flujo y entregados como archivo o adjunto.
¿Cuándo usar este nodo?¶
Utiliza este nodo cuando necesites:
- Generar un reporte en PDF como parte de una automatización (incidente, mantenimiento, turno).
- Componer documentos con estructura rica (títulos, párrafos, tablas, listas, imágenes) usando datos del flujo.
- Producir un PDF para adjuntarlo a un correo, guardarlo en disco o reutilizar su contenido en otros nodos.
Configuración del Nodo¶
El formulario se organiza en cinco secciones seleccionables: Page, Header, Content, Footer y Output. Además, dispone de las pestañas Preview (vista previa) y JSON Editor.

Sección: Page (Página)¶
Define el formato del documento:
- Page Size: tamaño de página (
A4,A3,A5,A6,Letter,Legal,Tabloid). - Orientation: orientación (
Portrait/Landscape). - Custom Margins: márgenes personalizados en mm (opcional).
- Default Font: fuente por defecto del documento (familia, tamaño, color, negrita/cursiva) (opcional).
Secciones: Header / Content / Footer (Encabezado / Contenido / Pie)¶
Editores de bloques para el encabezado, el cuerpo y el pie del documento. Con Add block... se agregan bloques de distintos tipos, que se pueden reordenar y editar:
- Paragraph (párrafo), Heading (título H1–H6), Image (imagen por URL/base64), Table (tabla), List (lista ordenada/no ordenada), Divider (separador), Spacer (espaciador), Columns (columnas), Page Break (salto de página), QR Code y Barcode.
El texto de los bloques admite interpolación de variables ({{variable}}) para insertar datos del flujo.

Sección: Output (Salida)¶
Define cómo se entrega el PDF:
- Output Format:
Base64(la salida incluyepdf_base64),File(se guarda como archivo) oBoth. - File Name / Directory Path: nombre y ruta del archivo (cuando el formato es File o Both). El nombre admite interpolación (por ejemplo,
report-{{id}}.pdf).
Vista Preview (Vista previa)¶
La pestaña Preview muestra una representación aproximada del documento (tamaño, orientación y bloques) para validar el diseño antes de generarlo.
Vista Editor de JSON¶

Estructura JSON (Parámetros de entrada)¶
{
"document": {
"page_size": "A4",
"orientation": "portrait",
"margins": null,
"default_font": null,
"header": [],
"footer": [],
"blocks": [
{ "type": "heading", "text": "Incident Report", "level": 1, "align": "left" },
{ "type": "paragraph", "text": "An intrusion alarm was triggered at the North Gate on {{trigger.datetime}}. Sensor: {{trigger.object_name}}. Status: {{trigger.state.state}}.", "align": "left" }
]
},
"output_format": "base64",
"file_name": "",
"file_path": ""
}
Campos del JSON¶
| Campo | Tipo | Descripción |
|---|---|---|
document |
object | Modelo del documento (página, fuente, márgenes y bloques de header/content/footer). |
document.page_size |
string | Tamaño de página (A4, Letter, etc.). |
document.orientation |
string | portrait o landscape. |
document.blocks |
array | Bloques del cuerpo del documento (cada uno con su type y campos). |
output_format |
string | base64, file o both. |
file_name |
string | Nombre del archivo (cuando aplica). Soporta interpolación. |
file_path |
string | Directorio del servidor donde se guarda el archivo (cuando aplica). |
Output: Dónde viene la data del nodo¶
Con output_format: base64, la salida incluye el PDF como pdf_base64, listo para usarse en nodos posteriores (por ejemplo, convertirlo a archivo con [[base64-to-file]] o adjuntarlo a un correo). Con file o both, el PDF se guarda como archivo en la ruta indicada.
Ejemplos de uso¶
Ejemplo 1: Acta de incidente de intrusión¶
Caso de uso: Al dispararse una alarma de intrusión, se genera un PDF con el título del incidente y un párrafo con los datos del evento, para adjuntarlo al correo de notificación.
- Page:
A4,Portrait - Content: un bloque Heading (
Incident Report) y un bloque Paragraph con datos del flujo. - Output Format:
Base64
(ver estructura JSON anterior)
Ejemplo 2: Parte de mantenimiento con tabla¶
Caso de uso: Generar un parte de mantenimiento con una tabla de tareas realizadas y guardarlo como archivo.
- Content: bloque Table con las tareas.
- Output Format:
File· File Name:maintenance-{{trigger.object_id}}.pdf
Validación y errores¶
| Condición | Causa / Solución habitual |
|---|---|
| El PDF sale vacío | Agrega al menos un bloque de contenido en la sección Content. |
| No se guarda el archivo | Con formato File/Both, verifica que File Name y Directory Path sean válidos y accesibles en el servidor. |
| Variables sin reemplazar | Revisa que las expresiones {{variable}} correspondan a datos disponibles en el flujo. |
Buenas prácticas¶
- Estructurar con bloques: combina títulos, párrafos y tablas para reportes legibles; usa la vista previa para validar el resultado.
- Datos dinámicos: aprovecha la interpolación
{{variable}}para insertar fecha, objeto y estado del evento. - Elegir el formato de salida adecuado: usa
base64para adjuntar/encadenar yfilecuando necesites persistir el documento. - Encadenar con otros nodos: combina con [[base64-to-file]] o con Enviar correo para entregar el reporte generado.