Geração de PDFs no Power Automate a partir de uma lista do SharePoint: um modelo Handlebars e um fluxo de trabalho de fatura HTML para PDF

PDF4me Gerar Documento Único É uma ação do Power Automate que renderiza um modelo HTML Handlebars e um payload JSON em um documento HTML finalizado, que a ação correspondente "Converter HTML para PDF" pagina para o formato A4. Uma nova linha em uma lista do SharePoint inicia o fluxo, o Compose monta o JSON e o Dropbox armazena o PDF da fatura com o nome do número da fatura. Sem conector premium, sem código.
Todas as equipes financeiras se deparam com o mesmo obstáculo no Power Automate. O recurso nativo Converter arquivo A ação requer uma licença premium e se recusa a usar um modelo HTML. Os serviços do Adobe PDF têm custos. O Encodian também tem custos. A solução alternativa popular de matthewdevaney ignora completamente o HTML e te prende ao Power Apps. O padrão abaixo é aquele que ninguém entre os dez primeiros resultados da SERP mostra de ponta a ponta: um conjunto de colunas de uma lista do SharePoint se torna uma carga útil JSON, um verdadeiro Modelo de guidão O arquivo está localizado em /Shared Documents/E duas ações do PDF4me realizam a renderização e a paginação pelo custo do conector da camada gratuita.
Renderização de templates Handlebars: PDF4me versus alternativas
A comparação que todo arquiteto do Power Automate faz antes de escolher um conector para PDFs de faturas:
| Abordagem vs PDF4me | Modelos de guidão? | Paginador de HTML para PDF? | Camada de conectores | Notas |
|---|---|---|---|---|
| PDF4me (este blog) | Sim, gerar documento único | Sim, converter HTML para PDF | Padrão | Duas ações de propósito único, sem necessidade de licença premium. |
| Serviços de PDF da Adobe | Não | Sim | Premium | Custo por usuário, sem mecanismo de modelos, somente HTML |
| Encodedian | Sem modelos nativos | Sim | Premium | Popular, mas pago por invocação. |
| rota do Power Apps de Matthew Devaney | Modelo do Word apenas | N / D | Padrão | Ignora completamente o HTML, ficando restrito ao front-end do Power Apps. |
nativo Convert File | Não | Somente Word/Excel, não HTML | Premium | Não é possível renderizar uma fatura em HTML. |
Uma lista de faturas do SharePoint é a fonte de dados principal. Um único modelo HTML Handlebars é armazenado ao lado. A cada nova linha, o Compose gera o JSON, o PDF4me Generate Document (Single) preenche o modelo, o PDF4me Convert HTML to PDF pagina o documento e o Dropbox salva a fatura finalizada com o nome do título da linha. Seis ações, todos conectores de nível padrão, um PDF personalizado por linha.
Perguntas e respostas baseadas no "porquê".
Por que armazenar o modelo Handlebars no SharePoint em vez de codificar o HTML diretamente no fluxo? O modelo se torna um arquivo editável que as equipes de finanças ou design podem atualizar no navegador. Altere um logotipo, ajuste a linha de totais ou adicione uma linha de IVA, e a próxima fatura já incluirá as alterações. O fluxo de trabalho nunca precisa ser reiniciado.
Por que duas ações do PDF4me em vez de uma? A função "Gerar Documento (Único)" é um mecanismo de modelos, não um paginador. Ela mescla JSON em HTML e retorna o HTML. A função "Converter HTML para PDF" é o paginador que lê esse HTML, aplica o tamanho de página A4, as margens e a impressão de fundo, e retorna os bytes do PDF. A separação das funções mantém cada ação com um propósito específico e permite visualizar o HTML renderizado antes de paginar.
Por que compor no meio? O modelo Handlebars é aninhado (fatura, cliente, matriz de itens, totais). O SharePoint fornece 12 colunas simples. A etapa "Compor" é responsável por "montar o JSON", transformando as colunas simples na carga útil aninhada que o modelo itera. Fazer isso na etapa "Compor" significa que a opção "Gerar Documento (Único)" recebe uma única entrada limpa, em vez de 12 blocos de conteúdo dinâmico espalhados pela configuração.
Por que usar o Dropbox para a saída, em vez de retornar para o SharePoint? O Dropbox é o armazenamento de demonstração. Qualquer conector de arquivo serve para a última etapa: Criar arquivo no SharePoint, Criar arquivo no OneDrive, Criar arquivo no Google Drive ou Carregar arquivo via SFTP. O corpo da conversão de HTML para PDF é um arquivo binário simples; o destino é uma troca (swap), não uma reescrita.
O que você receberá
Entrada: uma lista do SharePoint chamada Invoices (colunas: Título, Data da Fatura, Data de Vencimento, Nome do Cliente, Endereço do Cliente, E-mail do Cliente, Moeda, Subtotal, Alíquota de Imposto, Valor do Imposto, Total Geral, Observações) mais um único modelo Handlebars em /Shared Documents/invoice_template.html. Saída: um PDF A4 por linha no Dropbox, nomeado {Title}.pdf (INV-1005 torna-se INV-1005.pdf).
Do que você precisa
- Power Automate. Abra o Power AutomateOs conectores SharePoint, Dropbox e PDF4me usados abaixo são todos de nível padrão, não sendo necessário nenhum plano premium.
- Chave da API do PDF4me. Obtenha sua chave de APIConecte-o na primeira vez que adicionar uma ação do PDF4me.
- Site do SharePoint com uma lista chamada
Invoicese uma biblioteca de Documentos (com qualquer nome) onde o modelo Handlebars está armazenado. - Conta do Dropbox (ou qualquer destino de arquivo: SharePoint, OneDrive, Google Drive, SFTP, todos funcionam sem alterações).
- Modelo de fatura Handlebars, pronto para ser carregado em
/Shared Documents/. invoice_template.htmlCada caminho Handlebars nele corresponde à tabela de mapeamento abaixo. - Exemplo de fatura assinada em PDF, exatamente o que o fluxo produziu para INV-1005. Exemplo de fatura.pdf.
Primeiro, pegue as amostras. Baixe o modelo de guidão e faça o upload para /Shared Documents/ Antes de criar o fluxo, certifique-se de que a Etapa 3 tenha um arquivo de referência. O PDF de exemplo mostra exatamente o que significa "sucesso".
O Fluxo em Resumo
- Quando um item é criado (Gatilho do SharePoint em
Invoiceslista). - Compor a carga útil JSON aninhada (fatura / cliente / itens / totais / notas).
- Obter o conteúdo do arquivo usando o caminho para
/Shared Documents/invoice_template.html. - PDF - Gerar Documento (Único) Com o corpo do modelo mais o JSON, tipo de saída HTML.
- Converter HTML para PDF Formato A4 retrato, escala 0,8, margens de 40px, fundos de impressão: Sim.
- Criar arquivo no Dropbox
/, nome do arquivo{Title}.pdf.
Visão geral completa do fluxo

Execução completa do processo. A etapa de 11 segundos para converter HTML em PDF refere-se à paginação; todo o restante leva menos de meio segundo.
Passo 1: Como acionar um fluxo do Power Automate em uma nova fatura do SharePoint?
Fluxo até o momento: O fluxo começa aqui.
Aponte o gatilho do SharePoint para o site e a lista que contêm as linhas de suas faturas. Cada coluna se tornará conteúdo dinâmico posteriormente.
- Adicionar SharePoint > Quando um item é criado como gatilho.
- Configurar:
- Endereço do siteSelecione o site do SharePoint (no exemplo:
PDF4me Sharepoints - https://ynoox1.sharepoint.com/sites/PDF4meSharepoints). - Nome da lista:
Invoices.
- Endereço do siteSelecione o site do SharePoint (no exemplo:
- Salve e deixe o gatilho detectar o esquema da lista. As linhas na captura de tela abaixo (INV-1002, INV-1003, INV-1005) mostram exatamente as 12 colunas que o modelo Handlebars irá consumir.
A lista de faturas

A lista do SharePoint é a fonte da verdade. Cada coluna aqui corresponde a um campo do payload Handlebars.
Configuração do gatilho

Dois campos, esse é o gatilho completo. Todo o resto vem da linha.
Dica. Se sua equipe financeira já possui as faturas no Excel ou no Dataverse, mantenha-as lá. Troque o gatilho para Excel - Quando uma linha é adicionada ou Dataverse - Quando uma linha é adicionadaO restante do fluxo não se altera.
Etapa 2: Como construir o payload JSON do Handlebars a partir de uma linha do SharePoint?
Fluxo até o momento: Gatilho do SharePoint.
O Compose transforma as 12 colunas planas do SharePoint no JSON aninhado que o modelo Handlebars itera. O modelo espera invoice, customer, um items variedade, totalse um notes corda.
- Adicionar Compor.
- Em EntradasCole o JSON abaixo e, em seguida, insira o componente de conteúdo dinâmico do SharePoint correspondente entre as aspas de cada valor para que números e datas sejam exibidos como strings.
{
"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"
}
Compor configuração

Componha no modo de visualização de código. Cada valor JSON é um elemento do SharePoint entre as aspas, portanto, números e datas chegam como strings que o modelo Handlebars pode renderizar.
Dica. Mantenha o tamanho da matriz de itens fixo, correspondente ao número de colunas adicionadas ao SharePoint (cinco neste exemplo). Se uma linha tiver apenas três itens, deixe os campos Item4/Item5 em branco no SharePoint e adicione um novo item. {{#if description}} Crie uma linha de proteção ao redor da linha no modelo de guidão para que as linhas vazias sejam ignoradas.
Referência: Coluna do SharePoint para caminho Handlebars
O mapeamento exato entre uma coluna do SharePoint e seu respectivo local no modelo. Adicione esta tabela aos seus favoritos ao estender o esquema.
| Coluna do SharePoint | Caminho do guidão | Tipo | Usado no modelo |
|---|---|---|---|
Title | invoice.number | Texto | Cabeçalho com o número da fatura e nome do arquivo do Dropbox |
InvoiceDate | invoice.date | Data | Cabeçalho da fatura |
DueDate | invoice.dueDate | Data | Cabeçalho da fatura |
CustomerName | customer.name | Texto | Bloqueio de fatura |
CustomerAddress | customer.address | Texto | Bloqueio de fatura |
CustomerEmail | customer.email | Texto | Bloqueio de fatura |
Item{N}Description | items[N-1].description | Texto | Linha de item |
Item{N}Qty | items[N-1].quantity | Número | Linha de item |
Item{N}UnitPrice | items[N-1].unitPrice | Número | Linha de item |
Item{N}Amount | items[N-1].lineTotal | Número | Linha de item |
Currency | totals.currency e cada um items[].currency | Texto | Símbolo da moeda |
Subtotal | totals.subTotal | Número | Bloco de totais |
TaxRate | totals.taxRate | Número | Bloco de totais |
TaxAmount | totals.taxAmount | Número | Bloco de totais |
GrandTotal | totals.grandTotal | Número | Bloco de totais |
Notes | notes | Texto | Rodapé |
Passo 3: Como carregar o arquivo de modelo Handlebars do SharePoint?
Fluxo até o momento: Gatilho do SharePoint mais Compor.
Armazene o modelo como um arquivo simples. .html O arquivo está na biblioteca de Documentos do site. A ação "Obter conteúdo do arquivo usando o caminho" lê seus bytes brutos para que a ação "Gerar Documento (Único)" possa usá-los como corpo do modelo.
O próprio modelo
O modelo é HTML comum com CSS embutido, além de expressões Handlebars onde os dados são inseridos. Duas estruturas realizam o trabalho principal. {{#each items}} repete uma linha da tabela por item de linha, e o {{#if description}} O guarda interno ignora os espaços em branco deixados pelas colunas Item4 e Item5 não 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 o resto é uma substituição direta: {{invoice.number}} no cabeçalho, o {{customer.*}} bloco para faturamento, {{totals.*}} na tabela de totais, e {{notes}} no rodapé.
Baixe o modelo. Faça o upload para /Shared Documents/ como invoice_template.htmlEm seguida, edite o nome do vendedor, o endereço e o número de IVA na parte superior. Esses campos são estáticos propositalmente, portanto, são as únicas linhas que você precisa alterar antes da sua primeira execução.
- Adicionar SharePoint > Obter o conteúdo do arquivo usando o caminho.
- Configurar:
- Endereço do site: mesmo local que o gatilho.
- Caminho do arquivo:
/Shared Documents/invoice_template.html. - Inferir tipo de conteúdo:
Yes(Deixe o padrão).
Obter o conteúdo do arquivo usando o caminho

O modelo reside em /Shared Documents/ e é obtido por caminho absoluto. O histórico de versões é automático, pois trata-se apenas de um arquivo do SharePoint.
Dica. Se o seu modelo estiver armazenado no OneDrive ou no Dropbox, substitua esta ação pela opção equivalente "Obter conteúdo do arquivo" do respectivo serviço de armazenamento. Body O resultado de qualquer uma delas é o que a próxima etapa envia para os Dados do Arquivo de Modelo.
Passo 4: Como o PDF - Gerar Documento (Único) preenche o modelo Handlebars?
Fluxo até o momento: Gatilho do SharePoint mais Compor mais Obter conteúdo do arquivo usando o caminho.
O Generate Document (Single) é o mecanismo de modelos. Ele lê o código-fonte Handlebars ({{invoice.number}}, {{#each items}}...{{/each}}), substitui valores da carga útil JSON e retorna o HTML renderizado. Não realiza paginação. Essa é a tarefa da próxima etapa.
- Adicionar PDF4me PDF > PDF - Gerar Documento (Único).
- Configurar:
- Tipo de arquivo de modelo:
Html (Handlebars Syntax). - Nome do arquivo de modelo:
invoice_template.html. - Dados do arquivo de modelo: conteúdo dinâmico,
Bodyda etapa Obter conteúdo do arquivo do SharePoint. - Tipo de dados do documento:
Json. - Texto dos dados do documento: conteúdo dinâmico,
Bodyda etapa Compor. - Tipo de saída:
Html. - Mantenha o modelo de PDF editável.:
No.
- Tipo de arquivo de modelo:
Configuração de geração de documento (único)

Tipo de saída é Html, não PdfA opção "Gerar Documento (Único)" passa o HTML renderizado para a próxima etapa, de modo que a paginação permaneça uma preocupação separada e testável.
Dica. A opção Gerar Documento (Único) também é compatível com modelos do Word e PDF. Se a equipe de design lhe entregar um .docx Modelo de fatura, defina o tipo de arquivo do modelo como Word e altere o Tipo de Saída para Pdf Para ignorar completamente a etapa de conversão. O método Handlebars é o mais indicado quando você deseja controle de CSS e iteração de pré-visualização no navegador.
Passo 5: Como paginar o HTML renderizado em um PDF A4?
Fluxo até o momento: Gatilho do SharePoint + Compor + Obter conteúdo do arquivo usando o caminho + PDF - Gerar documento (único).
A função Converter HTML para PDF é o mecanismo de paginação. Ela lê o HTML gerado por Gerar Documento (Único), aplica o tamanho da página e as margens e retorna os bytes do PDF.
- Adicionar PDF4me PDF > Converter HTML para PDF.
- Configurar:
- Conteúdo do arquivo: conteúdo dinâmico,
Bodyda etapa Gerar Documento (Único). - Nome do arquivo HTML:
invoice.html. - Layout da página:
Portrait. - Tamanho da página:
A4. - Escala:
0.8(A fatura de 5 itens cabe em uma página). - Margem superior / inferior / esquerda / direita:
40pxcada. - Fundo para impressão:
Yes(Exibe a cor de fundo do bloco de totais).
- Conteúdo do arquivo: conteúdo dinâmico,
Converter configuração de HTML para PDF

A escala 0,8 permite que uma fatura de cinco linhas caiba em uma única página A4. Aumente para 0,9 ou 1,0 se tiver menos itens e desejar uma fonte maior.
Dica. Print Background: Yes é o cenário que finalmente torna tudo colorido. <td> As células e os gradientes CSS aparecem. Os navegadores removem as cores de fundo da impressão por padrão. Se a sua linha de totais estiver branca no PDF, é por isso.
Passo 6: Como salvar o PDF da fatura no Dropbox com um nome fácil de entender?
Fluxo até o momento: Gatilho do SharePoint + Compor + Obter conteúdo do arquivo usando o caminho + PDF - Gerar documento (único) + Converter HTML para PDF.
A etapa final consiste em colocar o PDF em uma pasta do Dropbox com um nome vinculado ao número da fatura.
- Adicionar Dropbox > Criar arquivo.
- Configurar:
- Caminho da pasta:
/(ou uma subpasta como/invoices/). - Nome do arquivo: conteúdo dinâmico,
Titledo gatilho do SharePoint, seguido pela string literal.pdf. INV-1005 torna-seINV-1005.pdf. - Conteúdo do arquivo: conteúdo dinâmico,
Bodyda etapa Converter HTML para PDF.
- Caminho da pasta:
Criar arquivo de configuração

Ao nomear o arquivo com o número da fatura, a pasta do Dropbox se torna automaticamente um arquivo de faturas pesquisável e sem duplicatas.
Dica. Se duas linhas puderem compartilhar o mesmo título, adicione um _ e um registro de data e hora: concat(triggerBody()?['Title'], '_', ticks(utcNow()), '.pdf')Caso contrário, o Dropbox sobrescreve silenciosamente o arquivo anterior com o mesmo nome.
Execute o fluxo e verifique.
- Salvar o fluxo no canto superior direito.
- Adicione uma nova linha ao
InvoicesLista do SharePoint. Defina o título para algo reconhecível (INV-1005) e preencha todas as colunas para que o modelo tenha dados reais. - Abra o fluxo Histórico de execução e selecione a execução mais recente. Todos os cartões devem estar verdes, semelhante à captura de tela da visão geral do fluxo. O cartão "Converter HTML para PDF" é o mais lento (cerca de 11 segundos) porque é onde a paginação ocorre.
- Abra o Dropbox e confirme.
INV-1005.pdf(ou seu título) está na raiz. Baixe-o, abra-o e compare com o exemplo.
O que você construiu exatamente? Um gerador de faturas nativo do SharePoint com um modelo HTML editável, tudo em seis ações de conector de nível padrão. O mesmo padrão (linha + modelo + renderização + paginação + armazenamento) funciona para orçamentos, notas de entrega, pedidos de compra, certificados de garantia ou qualquer PDF personalizado por linha. Troque o SharePoint pelo Dataverse ou Excel, o Dropbox pelo OneDrive e mantenha as duas ações do PDF4me.
Variações comuns que você pode adicionar sem reconstruir
Body e direcione-o ao SharePoint CustomerEmail coluna.Shared Documents/Signed Invoices/ assim, ele é preservado ao lado da lista de fontes.Perguntas frequentes
Como criar um PDF usando o Power Automate a partir de um item de lista do SharePoint?
Use o SharePoint When an item is created como gatilho, um Compose ação para transformar as colunas planas da linha em uma carga útil JSON aninhada, um Get file content using path ação para carregar seu modelo HTML de /Shared Documents/, PDF4me Generate Document (Single) para mesclar o JSON no modelo e PDF4me Convert HTML to PDF Para paginar o resultado, salve a saída em qualquer conector de arquivo (Dropbox, OneDrive, SharePoint). Todas as ações nessa cadeia estão no nível de conector padrão, portanto, você não precisa de uma licença do Power Automate Premium.
O Power Automate consegue gerar um PDF?
Sim. O Power Automate nativo não consegue renderizar um PDF a partir de um modelo HTML, mas o PDF4me O conector adiciona as duas ações que tornam isso possível: Generate Document (Single) para renderização de modelos e Convert HTML to PDF para paginação. Ambos são de nível padrão e gratuitos para instalar. Juntos, transformam qualquer linha do SharePoint / Dataverse / Excel em um PDF personalizado usando um modelo HTML editável armazenado ao lado dos dados.
Como criar um PDF a partir de um HTML no Power Automate?
Adicione o PDF4me Converte HTML para PDF Ação em qualquer lugar onde o fluxo tenha HTML no escopo (uma saída do Compose, um corpo de conteúdo de arquivo Get, uma expressão do Compose, uma carga útil de webhook). Configure o tamanho da página (A4), layout (Portrait), margens (40px), e definir Print Background: Yes Assim, os planos de fundo CSS são preservados. A ação Body A saída é o arquivo binário PDF que você envia para sua ação de armazenamento. Esta é a mesma ação usada na Etapa 5 acima.
O Power Automate consegue converter HTML em PDF sem a versão premium?
Sim. A ação Converter HTML para PDF do conector PDF4me está no nível de conector padrão, o que significa que você pode instalá-la e usá-la em qualquer plano do Power Automate sem precisar da licença Premium, que é necessária para a versão nativa. Convert File Os conectores do Adobe PDF Services também exigem uma chave de API do PDF4me (disponível na versão gratuita), que você deve colar ao adicionar a ação pela primeira vez.
Como gerar um PDF a partir de um modelo no Power Automate?
Usar PDF4me Gerar Documento (Único) com Template File Type: Html (Handlebars Syntax) (para modelos HTML) ou Word (para .docx modelos). Alimente os bytes do modelo em Template File Data e uma carga útil JSON em Document Data Text. Definir Output Type: Html se você precisar paginar posteriormente (como neste blog), ou Pdf para obter um PDF de volta em uma única etapa. A ação suporta toda a sintaxe Handlebars, incluindo {{#each}} e {{#if}} para itens de linha e blocos condicionais.
Solução de problemas
{{invoice.number}} literalmente no PDFO marcador de posição do modelo não foi substituído, o que significa que o texto dos dados do documento estava vazio ou era um JSON malformado. Abra as saídas da etapa Compose no histórico de execução e confirme se é um objeto JSON válido com o caminho de chave exato que o Handlebars está procurando (respeitando maiúsculas e minúsculas).
Definir Print Background: Yes Converter HTML para PDF. O mecanismo de impressão do Chromium remove as cores de fundo. <td> e <div> Por padrão; esta opção os reativa.
Diminua o Scale Converter HTML para PDF de 0,8 para 0,7. Como alternativa, adicione page-break-inside: avoid no <table> No modelo, a paginação é quebrada entre as linhas e não dentro delas.
Duas fileiras compartilhavam o mesmo TitleAltere a expressão Nome do Arquivo para concat(triggerBody()?['Title'], '_', ticks(utcNow()), '.pdf') Assim, cada execução gera um nome de arquivo único.
Próximos passos
Gerar documento (único) no Power Automate
Converter HTML para PDF no Power Automate
Obtenha sua chave de API
O mesmo padrão de seis etapas (linha + modelo + renderização + paginação + nome + armazenamento) lida com qualquer PDF personalizado por linha que você possa descrever em HTML.