Generazione automatizzata di PDF da un elenco di SharePoint con Power Automate: un modello Handlebars e un flusso di lavoro per la conversione da HTML a PDF delle fatture.

PDF4me Genera documento singolo Si tratta di un'azione di Power Automate che converte un modello HTML di Handlebars e un payload JSON in un documento HTML finale, che l'azione associata "Converti HTML in PDF" impagina in formato A4. Una nuova riga di un elenco di SharePoint avvia il flusso, Compose assembla il JSON e Dropbox salva il PDF della fattura con il nome corrispondente al numero della fattura. Nessun connettore premium, nessun codice.
Ogni team finanziario si scontra con lo stesso ostacolo in Power Automate. Il nativo Converti file L'azione richiede una licenza premium e si rifiuta di toccare un modello HTML. Adobe PDF Services ha un costo. Encodian ha un costo. La popolare soluzione alternativa di matthewdevaney salta completamente l'HTML e ti vincola a Power Apps. Il modello seguente è quello che nessuno tra i primi dieci della SERP mostra dall'inizio alla fine: un set di colonne di un elenco di SharePoint diventa un payload JSON, un vero Modello di manubrio il file si trova in /Shared Documents/e due azioni PDF4me si occupano del rendering e della paginazione per il costo del connettore di livello gratuito.
Rendering del modello del manubrio: PDF4me contro le alternative
Il confronto che ogni architetto di Power Automate effettua prima di scegliere un connettore per i PDF delle fatture:
| Approach vs PDF4me | Modello per il manubrio? | Un sistema di impaginazione da HTML a PDF? | Livello connettore | Note |
|---|---|---|---|---|
| PDF4me (questo blog) | Sì, Genera documento singolo | Sì, converti HTML in PDF | Standard | Due azioni monouso, non è necessaria alcuna licenza premium |
| Servizi PDF di Adobe | NO | SÌ | premi | Costo per utente, nessun motore di template, solo HTML |
| Encodian | Nessun modello nativo | SÌ | premi | Popolare ma a pagamento per ogni utilizzo. |
| percorso Power Apps di Matthewdevaney | Solo modello Word | N / A | Standard | Ignora completamente l'HTML, rimanendo bloccato sul front-end di Power Apps. |
Nativo Convert File | NO | Solo Word/Excel, non HTML | premi | Impossibile generare una fattura HTML. |
Un elenco di fatture SharePoint è la fonte di riferimento. Accanto ad esso è memorizzato un singolo modello HTML di Handlebars. Ad ogni nuova riga, Compose crea il JSON, PDF4me Generate Document (Single) compila il modello, PDF4me Convert HTML to PDF lo impagina e Dropbox salva la fattura finale con il nome corrispondente al titolo della riga. Sei azioni, tutte con connettori standard, un PDF personalizzato per ogni riga.
Domande e risposte basate sul "perché"
Perché memorizzare il modello Handlebars in SharePoint invece di inserire il codice HTML direttamente nel flusso? Il modello diventa un file modificabile che il reparto finanziario o quello di progettazione possono aggiornare direttamente nel browser. Basta cambiare un logo, ritoccare la riga dei totali o aggiungere una riga IVA e la fattura successiva rileverà automaticamente le modifiche. Non è mai necessario riaprire il flusso di lavoro.
Perché due azioni PDF4me invece di una? Genera documento (singolo) è un motore di template, non un paginatore. Unisce il JSON in HTML e restituisce HTML. Converti HTML in PDF è il paginatore che legge l'HTML, applica il formato pagina A4, i margini e la stampa dello sfondo e restituisce i byte del PDF. La separazione dei ruoli mantiene ogni azione focalizzata su un unico scopo e consente di visualizzare in anteprima l'HTML renderizzato prima della paginazione.
Perché comporre al centro? Il modello Handlebars è annidato (fattura, cliente, array di articoli, totali). SharePoint fornisce 12 colonne piatte. La fase di composizione è il passaggio di "assemblaggio JSON" che trasforma le colonne piatte nel payload annidato su cui il modello itera. Eseguendo questa operazione in Composizione, Genera documento (singolo) riceve un input pulito anziché 12 elementi di contenuto dinamico sparsi nella configurazione.
Perché Dropbox per l'output e non di nuovo SharePoint? Dropbox è lo spazio di archiviazione di esempio. Qualsiasi connettore di file è adatto per l'ultimo passaggio: SharePoint Crea file, OneDrive Crea file, Google Drive Crea file o SFTP Carica. Il corpo del file da Converti HTML in PDF è un semplice file binario; la destinazione è uno scambio, non una rielaborazione.
Cosa riceverai
Ingresso: un elenco SharePoint chiamato Invoices (colonne: Titolo, Data fattura, Data di scadenza, Nome cliente, Indirizzo cliente, Email cliente, Valuta, Subtotale, Aliquota fiscale, Importo imposta, Totale complessivo, Note) più un singolo modello Handlebars a /Shared Documents/invoice_template.html. Produzione: un PDF A4 per riga in Dropbox, denominato {Title}.pdf (INV-1005 diventa INV-1005.pdf).
Di cosa hai bisogno
- Power Automate. Open Power AutomateI connettori per SharePoint, Dropbox e PDF4me utilizzati di seguito sono tutti di livello standard, non è necessario alcun piano premium.
- Chiave API di PDF4me. Ottieni la tua chiave APICollegalo la prima volta che aggiungi un'azione PDF4me.
- Sito SharePoint con un elenco chiamato
Invoicese una raccolta Documenti (con un nome a scelta) in cui è memorizzato il modello Handlebars. - Account Dropbox (o qualsiasi destinazione di file: SharePoint, OneDrive, Google Drive, SFTP, tutte funzionano senza modifiche).
- Modello di fattura per manubrio, pronto per essere caricato su
/Shared Documents/. invoice_template.htmlOgni percorso Handlebars al suo interno corrisponde alla tabella di mappatura sottostante. - Esempio di fattura firmata in formato PDF, esattamente ciò che il flusso ha prodotto per INV-1005. invoice-sample.pdf.
Prendi prima i campioni. Scarica il modello Handlebars e caricalo su /Shared Documents/ prima di creare il flusso, in modo che il passaggio 3 abbia un file a cui fare riferimento. Il PDF di esempio dell'output mostra esattamente come si presenta un risultato "positivo".
Il flusso in sintesi
- Quando viene creato un elemento (Trigger di SharePoint attivo)
Invoiceselenco). - Comporre Il payload JSON annidato (fattura / cliente / articoli / totali / note).
- Ottieni il contenuto del file utilizzando il percorso per
/Shared Documents/invoice_template.html. - PDF - Genera documento (singolo) con il corpo del modello più il JSON, tipo di output Html.
- Convertire HTML in PDF con formato A4 verticale, scala 0,8, margini 40px, sfondi di stampa Sì.
- Crea file in Dropbox
/, nome del file{Title}.pdf.
Panoramica completa del flusso

Esecuzione completa. La conversione da HTML a PDF, che richiede 11 secondi, è dovuta al paginatore, tutto il resto è impiegato in meno di mezzo secondo.
Passaggio 1: Come si attiva un flusso di Power Automate su una nuova fattura di SharePoint?
Flusso finora: Il flusso inizia qui.
Imposta il trigger di SharePoint sul sito e sull'elenco che contengono le righe della fattura. Ogni colonna diventerà contenuto dinamico a valle.
- Aggiungere SharePoint > Quando viene creato un elemento come elemento scatenante.
- Specificare:
- Indirizzo del sito: selezionare il sito SharePoint (nell'esempio:
PDF4me Sharepoints - https://ynoox1.sharepoint.com/sites/PDF4meSharepoints). - Nome elenco:
Invoices.
- Indirizzo del sito: selezionare il sito SharePoint (nell'esempio:
- Salva e lascia che il trigger rilevi lo schema dell'elenco. Le righe nello screenshot qui sotto (INV-1002, INV-1003, INV-1005) mostrano le 12 colonne esatte che il modello Handlebars utilizzerà.
Elenco delle fatture

L'elenco di SharePoint è la fonte di verità. Ogni colonna di questo elenco corrisponde a un campo del payload di Handlebars.
Configurazione del trigger

Due campi, ecco cos'è l'intero trigger. Tutto il resto proviene dalla riga.
Mancia. Se il tuo team finanziario ha già le fatture in Excel o Dataverse, mantienile lì. Sostituisci il trigger con Excel - Quando viene aggiunta una riga O Dataverse - Quando viene aggiunta una rigaIl resto del flusso rimane invariato.
Passaggio 2: Come si crea il payload JSON di Handlebars a partire da una riga di SharePoint?
Flusso finora: Attivatore SharePoint.
Compose modella le 12 colonne piatte di SharePoint nel JSON annidato su cui itera il modello Handlebars. Il modello si aspetta invoice, customer, UN items vettore, totalse un notes corda.
- Aggiungere Comporre.
- In InputIncolla il JSON qui sotto, quindi inserisci il corrispondente elemento di contenuto dinamico di SharePoint tra le virgolette di ciascun valore, in modo che numeri e date vengano visualizzati come stringhe.
{
"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"
}
Composizione della configurazione

Componi nella visualizzazione Codice. Ogni valore JSON è un elemento SharePoint racchiuso tra virgolette, quindi numeri e date arrivano come stringhe che il modello Handlebars può visualizzare.
Mancia. Mantieni la matrice degli elementi di una dimensione fissa che corrisponda alle colonne aggiunte a SharePoint (cinque in questo esempio). Se una riga ha solo tre elementi, lascia Item4/Item5 vuoto in SharePoint e aggiungi un {{#if description}} proteggere la riga nel modello Handlebars in modo che le righe vuote vengano saltate.
Riferimento: Percorso da colonna SharePoint a Handlebars
La mappatura esatta tra una colonna di SharePoint e la sua posizione nel modello. Aggiungi questa tabella ai segnalibri quando estendi lo schema.
| colonna SharePoint | Percorso del manubrio | Tipo | Utilizzato nel modello |
|---|---|---|---|
Title | invoice.number | Testo | Intestazione del numero di fattura e nome del file Dropbox |
InvoiceDate | invoice.date | Data | Intestazione della fattura |
DueDate | invoice.dueDate | Data | Intestazione della fattura |
CustomerName | customer.name | Testo | Blocco di fatturazione |
CustomerAddress | customer.address | Testo | Blocco di fatturazione |
CustomerEmail | customer.email | Testo | Blocco di fatturazione |
Item{N}Description | items[N-1].description | Testo | Riga della voce |
Item{N}Qty | items[N-1].quantity | Numero | Riga della voce |
Item{N}UnitPrice | items[N-1].unitPrice | Numero | Riga della voce |
Item{N}Amount | items[N-1].lineTotal | Numero | Riga della voce |
Currency | totals.currency e ciascuno items[].currency | Testo | Simbolo della valuta |
Subtotal | totals.subTotal | Numero | Blocco totali |
TaxRate | totals.taxRate | Numero | Blocco totali |
TaxAmount | totals.taxAmount | Numero | Blocco totali |
GrandTotal | totals.grandTotal | Numero | Blocco totali |
Notes | notes | Testo | Piè di pagina |
Passaggio 3: Come si carica il file modello di Handlebars da SharePoint?
Flusso finora: Attivatore SharePoint più composizione.
Salva il modello come semplice .html file nella raccolta Documenti del sito. L'azione Ottieni contenuto file tramite percorso legge i suoi byte grezzi in modo che Genera documento (singolo) possa utilizzarli come corpo del modello.
Il modello stesso
Il template è un normale codice HTML con CSS incorporato, più espressioni Handlebars dove vengono inseriti i dati. Due costrutti svolgono il lavoro principale. {{#each items}} ripete una riga della tabella per ogni elemento della riga e il {{#if description}} La guardia al suo interno salta gli spazi vuoti lasciati dalle colonne Item4 e Item5 non utilizzate.
<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>
Tutto il resto è una sostituzione diretta: {{invoice.number}} nell'intestazione, il {{customer.*}} blocco per la fatturazione a, {{totals.*}} nella tabella dei totali e {{notes}} nel piè di pagina.
Scarica il modello. Caricalo correttamente /Shared Documents/ COME invoice_template.htmlSuccessivamente, modifica il nome del venditore, l'indirizzo e il numero di partita IVA in alto. Questi campi sono volutamente statici, quindi sono le uniche righe che devi modificare prima della prima esecuzione.
- Aggiungere SharePoint > Ottieni il contenuto del file utilizzando il percorso.
- Specificare:
- Indirizzo del sito: stesso sito del trigger.
- Percorso del file:
/Shared Documents/invoice_template.html. - Dedurre il tipo di contenuto:
Yes(lasciare l'impostazione predefinita).
Ottieni il contenuto del file utilizzando il percorso

Il modello risiede in /Shared Documents/ e viene recuperato tramite percorso assoluto. La cronologia delle versioni è automatica perché si tratta semplicemente di un file di SharePoint.
Mancia. Se il tuo modello si trova in OneDrive o Dropbox, sostituisci questa azione con l'equivalente di "Ottieni contenuto file" del sistema di archiviazione. Body L'output di ciascuno di essi è ciò che il passaggio successivo fornisce ai dati del file modello.
Passaggio 4: Come fa PDF - Genera documento (singolo) a compilare il modello Handlebars?
Flusso finora: Attivatore SharePoint più Composizione più Ottieni contenuto file tramite percorso.
Genera documento (singolo) è il motore del modello. Legge il codice sorgente di Handlebars ({{invoice.number}}, {{#each items}}...{{/each}}), sostituisce i valori dal payload JSON e restituisce l'HTML renderizzato. Non gestisce la paginazione. Questo è compito del passaggio successivo.
- Aggiungere PDF4me PDF > PDF - Genera documento (singolo).
- Specificare:
- Tipo di file modello:
Html (Handlebars Syntax). - Tempo di creazione del file modello:
invoice_template.html. - Dati del file modello: contenuto dinamico,
Bodydalla fase di recupero del contenuto del file di SharePoint. - Tipo di dati del documento:
Json. - Testo dei dati del documento: contenuto dinamico,
Bodydalla fase di composizione. - Tipo di output:
Html. - Mantieni il modello PDF modificabile:
No.
- Tipo di file modello:
Configurazione Genera documento (singolo)

Il tipo di output è Html, non Pdf. Genera documento (singolo) passa l'HTML renderizzato al passaggio successivo in modo che la paginazione rimanga una questione separata e testabile.
Mancia. Genera documento (singolo) supporta anche modelli Word e PDF. Se il team di progettazione ti consegna un .docx mockup fattura, imposta il tipo di file modello su Word e modificare il tipo di output in Pdf per saltare completamente il passaggio di conversione. La soluzione Handlebars è la migliore quando si desidera il controllo CSS e l'iterazione dell'anteprima del browser.
Passaggio 5: Come si impagina l'HTML renderizzato in un PDF in formato A4?
Flusso finora: Attivazione di SharePoint più Composizione più Ottieni contenuto file tramite percorso più PDF - Genera documento (singolo).
La funzione "Converti HTML in PDF" si occupa della paginazione. Legge il codice HTML prodotto da "Genera documento (singolo)", applica le dimensioni e i margini della pagina e restituisce i byte del file PDF.
- Aggiungere PDF4me PDF > Convertire HTML in PDF.
- Specificare:
- Contenuto del file: contenuto dinamico,
Bodydalla fase Genera documento (singolo). - Nome del file HTML:
invoice.html. - Layout di pagina:
Portrait. - Dimensioni della pagina:
A4. - Scala:
0.8(consente di inserire la fattura da 5 articoli in una sola pagina). - Margine superiore / inferiore / sinistro / destro:
40pxogni. - Sfondo di stampa:
Yes(renderizza il colore di sfondo del blocco dei totali).
- Contenuto del file: contenuto dinamico,
Configurazione per la conversione da HTML a PDF

Con una scala di 0,8, una fattura di cinque righe rimane su un singolo foglio A4. Aumentala a 0,9 o 1,0 se hai meno articoli e desideri un carattere più grande.
Mancia. Print Background: Yes è l'impostazione che alla fine rende colorato <td> Vengono visualizzate le celle e le sfumature CSS. I browser, per impostazione predefinita, rimuovono i colori di sfondo dalla stampa. Se la riga dei totali appare bianca nel PDF, questo è il motivo.
Passaggio 6: Come si salva il PDF della fattura su Dropbox con un nome riconoscibile?
Flusso finora: Trigger di SharePoint più Componi più Ottieni contenuto file tramite percorso più PDF - Genera documento (singolo) più Converti HTML in PDF.
L'ultimo passaggio consiste nel caricare il PDF in una cartella di Dropbox con un nome associato al numero della fattura.
- Aggiungere Dropbox > Crea file.
- Specificare:
- Percorso cartella:
/(o una sottocartella come/invoices/). - Nome del file: contenuto dinamico,
Titledal trigger di SharePoint, seguito dalla stringa letterale.pdf. INV-1005 diventaINV-1005.pdf. - Contenuto del file: contenuto dinamico,
Bodydalla fase di conversione da HTML a PDF.
- Percorso cartella:
Creazione della configurazione del file

Assegnando al file lo stesso nome del numero di fattura, la cartella Dropbox diventerà automaticamente un archivio di fatture ricercabile e senza duplicati.
Mancia. Se due righe possono condividere lo stesso titolo, aggiungi un _ e un timestamp: concat(triggerBody()?['Title'], '_', ticks(utcNow()), '.pdf')Altrimenti Dropbox sovrascrive silenziosamente il file precedente con lo stesso nome.
Esegui il flusso e verifica
- Salva il flusso in alto a destra.
- Aggiungi una nuova riga alla
InvoicesElenco SharePoint. Imposta il titolo su qualcosa di riconoscibile (INV-1005) e compilare ogni colonna in modo che il modello contenga dati reali. - Apri il flusso Cronologia delle esecuzioni e selezionare l'esecuzione più recente. Tutte le schede dovrebbero essere verdi, come nello screenshot della panoramica del flusso. La scheda "Converti HTML in PDF" è la più lenta (circa 11 secondi) perché è lì che avviene la paginazione.
- Apri Dropbox e conferma
INV-1005.pdf(o il tuo titolo) si trova nella directory principale. Scaricalo, aprilo e confrontalo con l'esempio.
Che cosa hai costruito esattamente? Un generatore di fatture nativo per SharePoint con un modello HTML modificabile, il tutto racchiuso in sei azioni di connessione standard. Lo stesso schema (riga più modello più rendering più impaginazione più archiviazione) funziona per preventivi, bolle di consegna, ordini di acquisto, certificati di garanzia o qualsiasi PDF personalizzato riga per riga. Sostituisci SharePoint con Dataverse o Excel, sostituisci Dropbox con OneDrive, mantieni le due azioni PDF4me.
Varianti comuni che puoi aggiungere senza dover ricostruire
Body e indirizzarlo a SharePoint CustomerEmail colonna.Shared Documents/Signed Invoices/ quindi viene conservato accanto all'elenco delle fonti.Domande frequenti
Come creare un PDF utilizzando Power Automate a partire da un elemento di un elenco di SharePoint?
Utilizzare SharePoint When an item is created come innesco, un Compose azione per modellare le colonne piatte della riga in un payload JSON nidificato, un Get file content using path azione per caricare il tuo modello HTML da /Shared Documents/, PDF4me Generate Document (Single) per unire il JSON nel modello e PDF4me Convert HTML to PDF per impaginare il risultato. Salva l'output in qualsiasi connettore di file (Dropbox, OneDrive, SharePoint). Ogni azione in questa sequenza si trova sul livello standard del connettore, quindi non è necessaria una licenza Power Automate Premium.
Power Automate può generare un PDF?
Sì. Native Power Automate non può generare un PDF da solo da un modello HTML, ma il PDF4me Il connettore aggiunge le due azioni che lo rendono possibile: Generate Document (Single) per il rendering del modello e Convert HTML to PDF Per la paginazione. Entrambi sono di livello standard e gratuiti da installare. Insieme trasformano qualsiasi riga di SharePoint/Dataverse/Excel in un PDF personalizzato utilizzando un modello HTML modificabile memorizzato accanto ai dati.
Come creare un PDF da un file HTML in Power Automate?
Aggiungi il PDF4me converte HTML in PDF azione ovunque il flusso abbia HTML nell'ambito (un output Compose, un corpo Get file content, un'espressione Compose, un payload webhook). Configura la dimensione della pagina (A4), disposizione (Portrait), margini (40px), e impostare Print Background: Yes quindi gli sfondi CSS vengono preservati. L'azione è Body L'output è il file binario PDF che viene fornito all'azione di archiviazione. Si tratta della stessa azione utilizzata nel passaggio 5 descritto in precedenza.
È possibile convertire HTML in PDF con Power Automate senza la versione premium?
Sì. L'azione Converti HTML in PDF del connettore PDF4me è disponibile nel livello standard del connettore, il che significa che puoi installarla e utilizzarla su qualsiasi piano Power Automate senza l'aggiornamento alla licenza Premium che è invece disponibile per il connettore nativo. Convert File e i connettori di Adobe PDF Services richiedono. È comunque necessaria una chiave API di PDF4me (è disponibile un piano gratuito), che va incollata quando si aggiunge l'azione per la prima volta.
Come generare un PDF da un modello in Power Automate?
Utilizzo PDF4me Genera documento (singolo) con Template File Type: Html (Handlebars Syntax) (per modelli HTML) o Word (per .docx modelli). Inserire i byte del modello in Template File Data e un payload JSON in Document Data Text. Impostato Output Type: Html se in seguito è necessario impaginare (come in questo blog), oppure Pdf per ottenere un PDF in un solo passaggio. L'azione supporta la sintassi completa di Handlebars, incluso {{#each}} E {{#if}} per le voci di riga e i blocchi condizionali.
Risoluzione dei problemi
{{invoice.number}} letteralmente nel PDFIl segnaposto del modello non è stato sostituito, il che significa che il testo dei dati del documento era vuoto o JSON non valido. Apri gli output del passaggio Compose nella cronologia di esecuzione e verifica che si tratti di un oggetto JSON valido con il percorso chiave esatto che Handlebars sta cercando (sensibile alle maiuscole/minuscole).
Impostato Print Background: Yes su Converti HTML in PDF. Il motore di stampa di Chromium rimuove i colori di sfondo da <td> E <div> per impostazione predefinita; questo interruttore li riattiva.
Abbassare il Scale su Converti HTML in PDF da 0.8 a 0.7. In alternativa, aggiungi page-break-inside: avoid sulla <table> nel template, quindi l'impaginazione si interrompe tra le righe e non al loro interno.
Due righe condividono lo stesso Title. Modifica l'espressione del nome del file in concat(triggerBody()?['Title'], '_', ticks(utcNow()), '.pdf') quindi ogni esecuzione produce un nome file univoco.
Prossimi passi
Genera documento (singolo) in Power Automate
Convertire HTML in PDF in Power Automate
Ottieni la tua chiave API
Lo stesso schema in sei fasi (riga più modello più rendering più impaginazione più nome più archivio) gestisce qualsiasi PDF personalizzato per riga che è possibile descrivere in HTML.