Generación de PDF con Power Automate a partir de una lista de SharePoint: una plantilla Handlebars y un flujo de trabajo para convertir facturas de HTML a PDF.

PDF4me Generar documento único Es una acción de Power Automate que genera un documento HTML a partir de una plantilla HTML Handlebars y una carga útil JSON. La acción correspondiente, Convertir HTML a PDF, lo pagina en formato A4. Una nueva fila de la lista de SharePoint activa el flujo, Compose ensambla el JSON y Dropbox almacena el PDF de la factura con el nombre del número de factura. No requiere conector premium ni código.
Todos los equipos financieros se topan con el mismo obstáculo en Power Automate. La función nativa Convertir archivo La acción requiere una licencia premium y se niega a tocar una plantilla HTML. Los servicios de Adobe PDF cuestan. Encodian cuesta. La solución alternativa popular de matthewdevaney omite HTML por completo y te obliga a usar Power Apps. El patrón que se muestra a continuación es el que nadie en los diez primeros resultados de búsqueda muestra de principio a fin: un conjunto de columnas de una lista de SharePoint se convierte en una carga útil JSON, una verdadera Plantilla de manillar El archivo vive en /Shared Documents/y dos acciones de PDF4me realizan la representación y paginación por el coste del conector de nivel gratuito.
Renderizado de plantillas Handlebars: PDF4me frente a las alternativas
La comparación que todo arquitecto de Power Automate realiza antes de elegir un conector para archivos PDF de facturas:
| Enfoque vs PDF4me | ¿Plantillas para Handlebars? | ¿Paginador de HTML a PDF? | Nivel de conector | Notas |
|---|---|---|---|---|
| PDF4me (este blog) | Sí, generar documento único | Sí, convertir HTML a PDF | Estándar | Dos acciones de propósito único, no se necesita licencia premium. |
| Servicios de Adobe PDF | No | Sí | De primera calidad | Coste por usuario, sin motor de plantillas, solo HTML |
| Encodiano | Sin plantillas nativas | Sí | De primera calidad | Popular pero de pago por invocación. |
| Ruta de Power Apps de Matthew Devaney | Plantilla de Word únicamente | N / A | Estándar | Omite completamente el HTML, está restringido a la interfaz de Power Apps. |
Nativo Convert File | No | Solo Word/Excel, no HTML | De primera calidad | No se puede generar una factura HTML. |
Una lista de facturas de SharePoint es la fuente de información principal. Junto a ella se almacena una plantilla HTML Handlebars. En cada fila nueva, Compose genera el JSON, PDF4me Generate Document (Single) rellena la plantilla, PDF4me Convert HTML to PDF la pagina y Dropbox guarda la factura final con el mismo nombre que el título de la fila. Seis acciones, todos conectores estándar, un PDF personalizado por fila.
Preguntas y respuestas basadas en el porqué
¿Por qué almacenar la plantilla Handlebars en SharePoint en lugar de codificar el HTML directamente en el flujo? La plantilla se convierte en un archivo editable que el departamento de finanzas o diseño puede actualizar en el navegador. Cambie un logotipo, ajuste la fila de totales o agregue una línea de IVA, y la siguiente factura incorporará los cambios. No es necesario volver a abrir el flujo de trabajo.
¿Por qué dos acciones de PDF4me en lugar de una? La función Generar documento (único) es un motor de plantillas, no un paginador. Convierte JSON en HTML y devuelve HTML. La función Convertir HTML a PDF es el paginador que lee ese HTML, aplica el tamaño de página A4, los márgenes y la impresión de fondo, y devuelve los bytes del PDF. La división de las funciones mantiene cada acción con un propósito específico y permite previsualizar el HTML generado antes de paginar.
¿Por qué componer en el medio? La plantilla Handlebars está anidada (factura, cliente, matriz de artículos, totales). SharePoint proporciona 12 columnas planas. El paso "Componer" es el que da forma a las columnas planas para crear la carga útil anidada sobre la que itera la plantilla. Al hacerlo en Componer, Generar documento (único) recibe una entrada limpia en lugar de 12 elementos de contenido dinámico dispersos en su configuración.
¿Por qué usar Dropbox para la salida y no volver a SharePoint? Dropbox es el almacenamiento de demostración. Cualquier conector de archivos se ajusta al último paso: SharePoint (Crear archivo), OneDrive (Crear archivo), Google Drive (Crear archivo) o SFTP (Cargar). El cuerpo de la conversión de HTML a PDF es un binario simple; el destino es un intercambio, no una modificación.
Lo que obtendrás
Aporte: una lista de SharePoint llamada Invoices (columnas: Título, Fecha de factura, Fecha de vencimiento, Nombre del cliente, Dirección del cliente, Correo electrónico del cliente, Moneda, Subtotal, Tasa impositiva, Importe del impuesto, Total general, Notas) más una única plantilla Handlebars en /Shared Documents/invoice_template.html. Producción: un PDF A4 por fila en Dropbox, llamado {Title}.pdf (INV-1005 se convierte en INV-1005.pdf).
Lo que necesitas
- Power Automate. Abrir Power AutomateLos conectores de SharePoint, Dropbox y PDF4me que se utilizan a continuación son todos de nivel estándar, no se requiere un plan premium.
- Clave API de PDF4me. Obtén tu clave APIConéctalo la primera vez que añadas una acción de PDF4me.
- sitio de SharePoint con una lista llamada
Invoicesy una biblioteca de documentos (con cualquier nombre) donde se almacena la plantilla Handlebars. - Cuenta de Dropbox (o cualquier destino de archivo: SharePoint, OneDrive, Google Drive, SFTP, todos se insertan sin cambios).
- Plantilla de factura de Handlebars, listo para subir a
/Shared Documents/. plantilla_de_factura.htmlCada ruta de Handlebars que contiene coincide con la tabla de asignación que aparece a continuación. - Ejemplo de factura firmada en formato PDF, exactamente lo que el flujo produjo para INV-1005. Ejemplo de factura.pdf.
Primero, toma las muestras. Descarga la plantilla Handlebars y súbela a /Shared Documents/ Antes de crear el flujo, el paso 3 debe tener un archivo al que apuntar. El PDF de salida de ejemplo muestra exactamente cómo se ve el "éxito".
El flujo de un vistazo
- Cuando se crea un artículo (Disparador de SharePoint en
Invoiceslista). - Componer la carga útil JSON anidada (factura / cliente / artículos / totales / notas).
- Obtener el contenido del archivo usando la ruta para
/Shared Documents/invoice_template.html. - PDF - Generar documento (individual) con el cuerpo de la plantilla más el JSON, tipo de salida Html.
- Convertir HTML a PDF con formato A4 vertical, escala 0.8, márgenes de 40px, impresión de fondos Sí.
- Crear archivo en Dropbox
/, Nombre del archivo{Title}.pdf.
Descripción general del flujo completo

Ejecución completa. El paginador tarda 11 segundos en convertir HTML a PDF; todo lo demás tarda menos de medio segundo.
Paso 1: ¿Cómo se activa un flujo de Power Automate en una nueva factura de SharePoint?
Flujo hasta ahora: El flujo comienza aquí.
Configure el desencadenador de SharePoint para que apunte al sitio y la lista que contienen las filas de sus facturas. Cada columna se convertirá en contenido dinámico posteriormente.
- Agregar SharePoint > Cuando se crea un artículo como detonante.
- Configurar:
- Dirección del sitio: seleccione el sitio de SharePoint (en el ejemplo:
PDF4me Sharepoints - https://ynoox1.sharepoint.com/sites/PDF4meSharepoints). - Nombre de la lista:
Invoices.
- Dirección del sitio: seleccione el sitio de SharePoint (en el ejemplo:
- Guarda y deja que el activador detecte el esquema de la lista. Las filas de la captura de pantalla a continuación (INV-1002, INV-1003, INV-1005) muestran las 12 columnas exactas que utilizará la plantilla Handlebars.
Lista de facturas

La lista de SharePoint es la fuente de información fidedigna. Cada columna se corresponde con un campo de la carga útil de Handlebars.
Configuración del disparador

Dos campos, ese es el desencadenante completo. Todo lo demás proviene de la fila.
Consejo. Si su equipo de finanzas ya tiene las facturas en Excel o Dataverse, manténgalas allí. Cambie el activador por Excel - Cuando se agrega una fila o Dataverse - Cuando se agrega una filaEl resto del flujo no cambia.
Paso 2: ¿Cómo se construye la carga útil JSON de Handlebars a partir de una fila de SharePoint?
Flujo hasta ahora: Disparador de SharePoint.
Compose da forma a las 12 columnas planas de SharePoint en el JSON anidado sobre el que itera la plantilla Handlebars. La plantilla espera invoice, customer, un items matriz, totalsy un notes cadena.
- Agregar Componer.
- En Entradas, pegue el JSON a continuación, luego coloque el elemento correspondiente de contenido dinámico de SharePoint entre las comillas de cada valor para que los números y las fechas aparezcan como cadenas.
{
"invoice": {
"number": "Title",
"date": "InvoiceDate",
"dueDate": "DueDate"
},
"customer": {
"name": "CustomerName",
"address": "CustomerAddress",
"email": "CustomerEmail"
},
"items": [
{ "description": "Item1Description", "quantity": "Item1Qty", "unitPrice": "Item1UnitPrice", "lineTotal": "Item1Amount", "currency": "Currency" },
{ "description": "Item2Description", "quantity": "Item2Qty", "unitPrice": "Item2UnitPrice", "lineTotal": "Item2Amount", "currency": "Currency" },
{ "description": "Item3Description", "quantity": "Item3Qty", "unitPrice": "Item3UnitPrice", "lineTotal": "Item3Amount", "currency": "Currency" },
{ "description": "Item4Description", "quantity": "Item4Qty", "unitPrice": "Item4UnitPrice", "lineTotal": "Item4Amount", "currency": "Currency" },
{ "description": "Item5Description", "quantity": "Item5Qty", "unitPrice": "Item5UnitPrice", "lineTotal": "Item5Amount", "currency": "Currency" }
],
"totals": {
"currency": "Currency",
"subTotal": "Subtotal",
"taxRate": "TaxRate",
"taxAmount": "TaxAmount",
"grandTotal": "GrandTotal"
},
"notes": "Notes"
}
Componer configuración

Componer en la vista de código. Cada valor JSON es una etiqueta de SharePoint entre las dos comillas, por lo que los números y las fechas llegan como cadenas que la plantilla Handlebars puede renderizar.
Consejo. Mantenga el tamaño de la matriz de elementos fijo que coincida con las columnas que agregó a SharePoint (cinco en este ejemplo). Si una fila solo tiene tres elementos, deje Item4/Item5 en blanco en SharePoint y agregue una {{#if description}} Guarda la fila en la plantilla Handlebars para que se omitan las filas vacías.
Referencia: Ruta de columna de SharePoint a Handlebars
La correspondencia exacta entre una columna de SharePoint y su ubicación en la plantilla. Guarda esta tabla como marcador cuando extiendas el esquema.
| Columna de SharePoint | Camino del manillar | Tipo | Utilizado en la plantilla |
|---|---|---|---|
Title | invoice.number | Texto | Encabezado del número de factura y nombre del archivo de Dropbox |
InvoiceDate | invoice.date | Fecha | Encabezado de la factura |
DueDate | invoice.dueDate | Fecha | Encabezado de la factura |
CustomerName | customer.name | Texto | Proyecto de ley para bloquear |
CustomerAddress | customer.address | Texto | Proyecto de ley para bloquear |
CustomerEmail | customer.email | Texto | Proyecto de ley para bloquear |
Item{N}Description | items[N-1].description | Texto | Fila de artículo |
Item{N}Qty | items[N-1].quantity | Número | Fila de artículo |
Item{N}UnitPrice | items[N-1].unitPrice | Número | Fila de artículo |
Item{N}Amount | items[N-1].lineTotal | Número | Fila de artículo |
Currency | totals.currency y cada uno items[].currency | Texto | Símbolo monetario |
Subtotal | totals.subTotal | Número | Bloque de totales |
TaxRate | totals.taxRate | Número | Bloque de totales |
TaxAmount | totals.taxAmount | Número | Bloque de totales |
GrandTotal | totals.grandTotal | Número | Bloque de totales |
Notes | notes | Texto | Pie de página |
Paso 3: ¿Cómo se carga el archivo de plantilla Handlebars desde SharePoint?
Flujo hasta ahora: Disparador de SharePoint más Compose.
Almacene la plantilla como un archivo plano. .html archivo en la biblioteca de documentos del sitio. La acción Obtener contenido del archivo usando ruta lee sus bytes sin procesar para que Generar documento (único) pueda usarlos como cuerpo de la plantilla.
La plantilla en sí
La plantilla es HTML estándar con CSS en línea, además de expresiones Handlebars donde se insertan los datos. Dos estructuras realizan el trabajo principal. {{#each items}} repite una fila de tabla por cada elemento de línea, y el {{#if description}} El mecanismo de protección interno omite los espacios en blanco que dejan las columnas Item4 e Item5 no utilizadas.
<tbody>
{{#each items}}
{{#if description}}
<tr>
<td>{{description}}</td>
<td class="num">{{quantity}}</td>
<td class="num">{{currency}}{{unitPrice}}</td>
<td class="num">{{currency}}{{lineTotal}}</td>
</tr>
{{/if}}
{{/each}}
</tbody>
Todo lo demás es una sustitución directa: {{invoice.number}} en el encabezado, el {{customer.*}} Bloque para facturar a, {{totals.*}} en la tabla de totales, y {{notes}} en el pie de página.
Descarga la plantilla. Súbelo a /Shared Documents/ como invoice_template.htmlLuego, edita el nombre del vendedor, la dirección y el número de IVA en la parte superior. Estos datos son estáticos, por lo que son las únicas líneas que debes modificar antes de la primera ejecución.
- Agregar SharePoint > Obtener el contenido del archivo usando la ruta.
- Configurar:
- Dirección del sitio: mismo sitio que el activador.
- Ruta del archivo:
/Shared Documents/invoice_template.html. - Inferir tipo de contenido:
Yes(dejar la configuración predeterminada).
Obtener el contenido del archivo usando la ruta

La plantilla reside en /Shared Documents/ y se obtiene mediante una ruta absoluta. El historial de versiones es automático porque se trata simplemente de un archivo de SharePoint.
Consejo. Si su plantilla reside en OneDrive o Dropbox, sustituya esta acción por la equivalente de almacenamiento Obtener contenido del archivo. Body El resultado de cualquiera de ellos es lo que el siguiente paso proporciona a los datos del archivo de plantilla.
Paso 4: ¿Cómo rellena la plantilla Handlebars la opción PDF - Generar documento (único)?
Flujo hasta ahora: Disparador de SharePoint más Componer más Obtener contenido de archivo usando ruta.
Generar documento (único) es el motor de plantillas. Lee el código fuente de Handlebars ({{invoice.number}}, {{#each items}}...{{/each}}), sustituye los valores de la carga útil JSON y devuelve el HTML renderizado. No realiza paginación. Esa es la función del siguiente paso.
- Agregar PDF4me PDF > PDF - Generar documento (individual).
- Configurar:
- Tipo de archivo de plantilla:
Html (Handlebars Syntax). - Nombre del archivo de plantilla:
invoice_template.html. - Datos del archivo de plantilla: contenido dinámico,
Bodydel paso Obtener contenido de archivo de SharePoint. - Tipo de datos del documento:
Json. - Texto de los datos del documento: contenido dinámico,
Bodydesde el paso de composición. - Tipo de salida:
Html. - Mantener la plantilla PDF editable:
No.
- Tipo de archivo de plantilla:
Configuración de generación de documento (único)

El tipo de salida es Html, no Pdf. Generar documento (único) transfiere el HTML renderizado al siguiente paso, de modo que la paginación sigue siendo una cuestión separada y comprobable.
Consejo. Generar documento (único) también admite plantillas de Word y PDF. Si el equipo de diseño le entrega un .docx Maqueta de factura, configure el tipo de archivo de plantilla en Word y cambiar el tipo de salida a Pdf Para omitir por completo el paso de conversión, Handlebars es la mejor opción cuando se desea control CSS e iteración de vista previa en el navegador.
Paso 5: ¿Cómo se pagina el HTML generado para convertirlo en un PDF tamaño A4?
Flujo hasta ahora: Activador de SharePoint más Componer más Obtener contenido de archivo usando ruta más PDF - Generar documento (único).
La función Convertir HTML a PDF es el motor de paginación. Lee el HTML generado por Generar documento (único), aplica el tamaño de página y los márgenes, y devuelve los bytes del PDF.
- Agregar PDF4me PDF > Convertir HTML a PDF.
- Configurar:
- Contenido del archivo: contenido dinámico,
Bodydel paso Generar documento (único). - Nombre del archivo HTML:
invoice.html. - Diseño de página:
Portrait. - Tamaño de página:
A4. - Escala:
0.8(Permite incluir la factura de 5 artículos en una sola página). - Margen superior / inferior / izquierdo / derecho:
40pxcada. - Fondo de impresión:
Yes(Muestra el color de fondo del bloque de totales).
- Contenido del archivo: contenido dinámico,
Configuración de conversión de HTML a PDF

La escala 0.8 permite que una factura de cinco líneas quepa en una sola página A4. Auméntala a 0.9 o 1.0 si tienes menos artículos y quieres una fuente más grande.
Consejo. Print Background: Yes es el entorno que finalmente hace que el color <td> Aparecen celdas y degradados CSS. Los navegadores eliminan los colores de fondo de la impresión por defecto. Si la fila de totales aparece en blanco en el PDF, esta es la razón.
Paso 6: ¿Cómo se guarda el PDF de la factura en Dropbox con un nombre predecible?
Flujo hasta ahora: Activador de SharePoint más Componer más Obtener contenido de archivo usando ruta más PDF - Generar documento (único) más Convertir HTML a PDF.
El último paso consiste en guardar el PDF en una carpeta de Dropbox cuyo nombre está vinculado al número de factura.
- Agregar Dropbox > Crear archivo.
- Configurar:
- Ruta de la carpeta:
/(o una subcarpeta como/invoices/). - Nombre del archivo: contenido dinámico,
Titledel desencadenador de SharePoint, seguido de la cadena literal.pdf. INV-1005 se convierte enINV-1005.pdf. - Contenido del archivo: contenido dinámico,
Bodydel paso Convertir HTML a PDF.
- Ruta de la carpeta:
Crear configuración de archivo

Si se nombra el archivo con el número de factura, la carpeta de Dropbox se convierte automáticamente en un archivo de facturas con capacidad de búsqueda y sin duplicados.
Consejo. Si dos filas pueden compartir el mismo título, agregue una _ y una marca de tiempo: concat(triggerBody()?['Title'], '_', ticks(utcNow()), '.pdf')De lo contrario, Dropbox sobrescribe silenciosamente el archivo anterior con el mismo nombre.
Ejecuta el flujo y verifica.
- Ahorrar el flujo en la parte superior derecha.
- Agregue una nueva fila a la
InvoicesLista de SharePoint. Establezca un título reconocible (INV-1005) y rellena todas las columnas para que la plantilla tenga datos reales. - Abrir el flujo Historial de ejecución y selecciona la ejecución más reciente. Todas las tarjetas deben ser verdes, como se muestra en la captura de pantalla del resumen del flujo. La tarjeta Convertir HTML a PDF es la más lenta (unos 11 segundos) porque es donde se realiza la paginación.
- Abre Dropbox y confirma
INV-1005.pdf(o tu título) está en la raíz. Descárgalo, ábrelo y compáralo con el ejemplo.
¿Qué construiste exactamente? Un generador de facturas nativo de SharePoint con una plantilla HTML editable, todo en seis acciones de conector estándar. El mismo patrón (fila + plantilla + renderizado + paginación + almacenamiento) funciona para presupuestos, albaranes, órdenes de compra, certificados de garantía o cualquier PDF personalizado por fila. Sustituya SharePoint por Dataverse o Excel, Dropbox por OneDrive y conserve las dos acciones de PDF4me.
Variaciones comunes que puedes agregar sin reconstruir
Body y dirigirlo a SharePoint CustomerEmail columna.Shared Documents/Signed Invoices/ por lo que se conserva junto a la lista de fuentes.Preguntas frecuentes
¿Cómo crear un PDF usando Power Automate a partir de un elemento de una lista de SharePoint?
Utilice SharePoint When an item is created como detonante, un Compose acción para dar forma a las columnas planas de la fila en una carga útil JSON anidada, una Get file content using path acción para cargar su plantilla HTML desde /Shared Documents/PDF4me Generate Document (Single) para fusionar el JSON en la plantilla y PDF4me Convert HTML to PDF Para paginar el resultado, guarde la salida en cualquier conector de archivos (Dropbox, OneDrive, SharePoint). Cada acción en esa cadena se encuentra en el nivel de conector estándar, por lo que no necesita una licencia de Power Automate Premium.
¿Puede Power Automate generar un PDF?
Sí. Power Automate nativo no puede generar un PDF por sí solo a partir de una plantilla HTML, pero la PDF4me El conector añade las dos acciones que lo hacen posible: Generate Document (Single) para la representación de plantillas y Convert HTML to PDF Para la paginación. Ambas son de nivel estándar y de instalación gratuita. Juntas, convierten cualquier fila de SharePoint, Dataverse o Excel en un PDF personalizado mediante una plantilla HTML editable almacenada junto a los datos.
¿Cómo crear un PDF a partir de HTML en Power Automate?
Añade el PDF4me convierte HTML a PDF acción en cualquier lugar donde el flujo tenga HTML en el ámbito (una salida de Compose, un cuerpo de contenido de archivo Get, una expresión de Compose, una carga útil de webhook). Configure el tamaño de la página (A4), disposición (Portrait), márgenes (40px), y establecer Print Background: Yes por lo que los fondos CSS se conservan. La acción Body La salida es el archivo binario PDF que se introduce en la acción de almacenamiento. Esta es la misma acción utilizada en el paso 5 anterior.
¿Puede Power Automate convertir HTML a PDF sin una cuenta Premium?
Sí. La acción Convertir HTML a PDF del conector PDF4me está en el nivel de conector estándar, lo que significa que puede instalarlo y usarlo en cualquier plan de Power Automate sin la actualización de licencia Premium que requiere la versión nativa. Convert File y los conectores de Adobe PDF Services lo requieren. Aún necesitas una clave API de PDF4me (hay una versión gratuita disponible), que debes pegar cuando agregues la acción por primera vez.
¿Cómo generar un PDF a partir de una plantilla en Power Automate?
Usar PDF4me Generar documento (individual) con Template File Type: Html (Handlebars Syntax) (para plantillas HTML) o Word (para .docx plantillas). Introduzca los bytes de la plantilla en Template File Data y una carga útil JSON en Document Data Text. Colocar Output Type: Html si necesita paginar posteriormente (como en este blog), o Pdf para obtener un PDF en un solo paso. La acción admite la sintaxis completa de Handlebars, incluyendo {{#each}} y {{#if}} para partidas individuales y bloques condicionales.
Solución de problemas
{{invoice.number}} literalmente en el PDFEl marcador de posición de la plantilla no se sustituyó, lo que significa que el texto de los datos del documento estaba vacío o era un JSON con formato incorrecto. Abra las salidas del paso Componer en el historial de ejecución y confirme que se trata de un objeto JSON válido con la ruta de clave exacta que busca Handlebars (distingue entre mayúsculas y minúsculas).
Colocar Print Background: Yes en Convertir HTML a PDF. El motor de impresión de Chromium elimina los colores de fondo de <td> y <div> Por defecto; este interruptor los vuelve a habilitar.
Bajar el Scale en Convertir HTML a PDF de 0.8 a 0.7. Alternativamente, agregue page-break-inside: avoid en el <table> en la plantilla, de modo que la paginación se divide entre filas y no dentro de ellas.
Dos filas compartían lo mismo Title. Cambie la expresión del nombre de archivo a concat(triggerBody()?['Title'], '_', ticks(utcNow()), '.pdf') De esta forma, cada ejecución produce un nombre de archivo único.
Próximos pasos
El mismo patrón de seis pasos (fila más plantilla más renderizado más paginación más nombre más almacenamiento) gestiona cualquier PDF personalizado por fila que puedas describir en HTML.