跳到主要内容

使用 Power Automate 从 SharePoint 列表生成 PDF:Handlebars 模板以及 HTML 转 PDF 发票工作流程

· 阅读需 29 分钟
SEO and Content Writer

PDF4me 生成单个文档 这是一个 Power Automate 操作,它将 Handlebars HTML 模板和 JSON 有效负载渲染成一个完整的 HTML 文档,然后由配套的“将 HTML 转换为 PDF”操作将其分页到 A4 纸张上。SharePoint 列表中的新行会触发此流程,“撰写”操作会组装 JSON,Dropbox 会将发票 PDF 存储到以发票编号命名的文件夹中。无需高级连接器,也无需编写任何代码。

每个财务团队在使用 Power Automate 时都会遇到同样的难题。 转换文件 此操作需要高级许可证,并且拒绝修改 HTML 模板。Adobe PDF 服务和 Encodian 都需要付费。matthewdevaney 的热门变通方案完全绕过了 HTML,并将您锁定在 Power Apps 中。以下模式是搜索结果前十名中没有任何一家能够完整展示的:SharePoint 列表列集被转换为 JSON 有效负载,一个真正的 车把模板 文件位于 /Shared Documents/而且,PDF4me 的两个操作可以实现渲染和分页,而免费层连接器的成本仅为两个操作。

Handlebars模板渲染:PDF4me与其他替代方案的比较

每个 Power Automate 架构师在选择发票 PDF 连接器之前都会进行比较:

方法与 PDF4me车把模板?HTML 转 PDF 分页器?连接器层笔记
PDF4me(本博客)是的,生成单个文档是的,将 HTML 转换为 PDF标准两个单一用途的操作,无需高级许可证
Adobe PDF 服务是的优质的按用户付费,无模板引擎,仅支持 HTML
编码员没有原生模板是的优质的受欢迎,但每次调用都要付费
matthewdevaney Power Apps 路线仅限 Word 模板不适用标准完全跳过 HTML,仅限 Power Apps 前端。
本国的 Convert File仅限 Word/Excel,不包含 HTML优质的完全无法生成 HTML 发票。
流程概览
1. When an item is created
SharePoint trigger on the Invoices list. Fires per new row, hands every column to the flow as dynamic content.
2. Compose
Builds one JSON payload from the row: invoice, customer, items[], totals, notes. The exact shape the Handlebars template expects.
3. Get file content using path
SharePoint /Shared Documents/invoice_template.html. The Handlebars template lives beside the data, versioned in the same site.
4. PDF - Generate Document (Single)
PDF4me action. Template File Type Html (Handlebars Syntax), Document Data Type Json, Output Type Html.
5. Convert HTML to PDF
PDF4me action. A4, portrait, scale 0.8, 40px margins, print backgrounds Yes.
6. Create file
Dropbox /. File Name Title.pdf, so INV-1005 is saved as INV-1005.pdf.
简短版

SharePoint 发票列表是数据源。旁边存储着一个 Handlebars HTML 模板。每当新增一行数据时,Compose 会生成 JSON 数据,PDF4me Generate Document (Single) 会填充模板,PDF4me Convert HTML to PDF 会对其进行分页,最后 Dropbox 会将生成的发票保存为与该行标题相同的名称。总共六个操作,全部使用标准层连接器,每行生成一个带有品牌标识的 PDF 文件。

基于原因的问答

为什么要将 Handlebars 模板存储在 SharePoint 中,而不是将 HTML 硬编码到流程中? 模板会变成一个可编辑文件,财务或设计人员可以直接在浏览器中更新。更改徽标、调整总计行或添加增值税行,下一张发票就会自动应用这些更改。整个流程无需重新打开。

为什么需要两个 PDF4me 操作而不是一个? “生成文档(单页)”是一个模板引擎,而非分页器。它将 JSON 合并成 HTML 并返回 HTML 文件。“将 HTML 转换为 PDF”才是分页器,它会读取 HTML 文件,应用 A4 页面大小、页边距和背景打印设置,并返回 PDF 字节文件。这种角色分离的设计使得每个操作都具有单一用途,并允许您在分页之前预览渲染后的 HTML 文件。

为什么要在中间作曲? Handlebars 模板采用嵌套结构(发票、客户、项目数组、总计)。SharePoint 会提供 12 个扁平列。“撰写”步骤是“组装 JSON”的过程,它将这些扁平列构建成模板迭代处理的嵌套有效负载。在“撰写”步骤中完成此操作意味着“生成文档(单个)”只需接收一个干净的输入,而不是 12 个散落在其配置中的动态内容块。

为什么输出文件要保存到 Dropbox,而不是保存回 SharePoint? Dropbox 是演示存储。任何文件连接器都适用于最后一步:SharePoint 创建文件、OneDrive 创建文件、Google Drive 创建文件或 SFTP 上传。将 HTML 转换为 PDF 的正文是纯二进制文件;目标是替换,而不是重新处理。


您将获得

输入: 一个名为 SharePoint 的列表 Invoices (列:标题、发票日期、到期日、客户姓名、客户地址、客户邮箱、货币、小计、税率、税额、总计、备注)以及一个 Handlebars 模板 /Shared Documents/invoice_template.html输出: Dropbox 中每行一个 A4 PDF 文件,名为 {Title}.pdf (INV-1005 变为 INV-1005.pdf)。


你需要什么

  • 动力自动化打开 Power Automate下面使用的 SharePoint、Dropbox 和 PDF4me 连接器均为标准版,无需高级套餐。
  • PDF4me API密钥获取您的 API 密钥首次添加 PDF4me 操作时进行连接。
  • SharePoint 网站 有一个名为 Invoices 以及一个文档库(名称任意),其中存储了 Handlebars 模板。
  • Dropbox 帐户 (或任何文件目标位置:SharePoint、OneDrive、Google Drive、SFTP 等,所有位置均保持不变)。
  • Handlebars 发票模板准备上传到 /Shared Documents/invoice_template.html其中的每个 Handlebars 路径都与下面的映射表相匹配。
  • 已签署发票样本(PDF格式)这正是 INV-1005 的流程所产生的结果。 发票样本.pdf

先拿到样品。 下载车把模板并上传到 /Shared Documents/ 在构建流程之前,请确保步骤 3 中有一个指向的文件。示例输出 PDF 文件清晰地展示了“成功”的示例。


流程概览

  1. 创建物品时 (SharePoint 触发器) Invoices 列表)。
  2. 撰写 嵌套的 JSON 有效负载(发票/客户/项目/总计/备注)。
  3. 使用路径获取文件内容 为了 /Shared Documents/invoice_template.html
  4. PDF - 生成文档(单个) 模板主体加上 JSON,输出类型为 Html。
  5. 将 HTML 转换为 PDF A4 纵向,缩放比例 0.8,40px 边距,打印背景:是。
  6. 创建文件 在 Dropbox 中 /, 文件名 {Title}.pdf

完整流程概述

Power Automate 流程概览,显示六个顺序操作,每个操作都带有绿色成功标记和运行时间:SharePoint 创建项目(0.4 秒)、撰写(0 秒)、SharePoint 使用路径获取文件内容(0.3 秒)、PDF4me PDF - 生成单个文档(0.4 秒)、PDF4me 将 HTML 转换为 PDF(11 秒)以及 Dropbox 创建文件(1 秒)。

端到端运行。将 HTML 转换为 PDF 耗时 11 秒,这是分页器部分,其他所有操作均在半秒以内。


步骤 1:如何在新的 SharePoint 发票上触发 Power Automate 流?

目前为止的流程: 流程从这里开始。

将 SharePoint 触发器指向包含发票行的站点和列表。之后,每一列都会变成动态内容。

  1. 添加 SharePoint > 创建物品时 作为触发因素。
  2. 配置
    • 网站地址选择 SharePoint 站点(例如: PDF4me Sharepoints - https://ynoox1.sharepoint.com/sites/PDF4meSharepoints)。
    • 列表名称Invoices
  3. 保存并让触发器检测列表架构。以下屏幕截图中的行(INV-1002、INV-1003、INV-1005)显示了 Handlebars 模板将使用的 12 列。

发票清单

SharePoint 发票列表,包含三个示例行:INV-1002 Globex Ltd、INV-1003 Initech Inc 和 INV-1005 Initech LLC,显示列包括:标题、发票 JSON、发票日期、到期日、客户名称、客户地址、客户电子邮件、货币、小计、税率、税额、总计和备注。

SharePoint 列表是真实数据源。这里的每一列都对应 Handlebars 有效负载中的一个字段。

触发器配置

Power Automate SharePoint 创建项目时触发器已配置,站点地址为 PDF4me SharePoint,列表名称为发票,并显示“已连接到 SharePoint”状态。

触发器只有两个字段,其他所有信息都来自该行。

提示。 如果您的财务团队已经在 Excel 或 Dataverse 中保存了发票,请保留这些文件。将触发器更改为 Excel - 添加行时 或者 数据宇宙 - 添加行时其余流程保持不变。


步骤 2:如何从 SharePoint 行构建 Handlebars JSON 有效负载?

目前为止的流程: SharePoint触发器。

Compose 功能将 SharePoint 中的 12 个扁平列转换为 Handlebars 模板迭代的嵌套 JSON。该模板需要…… invoicecustomer, 一个 items 大批, totals,以及一个 notes 细绳。

  1. 添加 撰写
  2. 输入粘贴下面的 JSON,然后将匹配的 SharePoint 动态内容字段放入每个值的引号之间,以便数字和日期作为字符串出现。
{
"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"
}

组合配置

Power Automate Compose 操作代码视图显示了一个嵌套的 JSON 有效负载,其中包含发票(编号、日期、到期日)、客户(姓名、地址、电子邮件)、包含 5 个行项目的数组(描述、数量、单价、行总计、货币)、总计(货币、小计、税率、税额、总计)和备注,每个值都绑定到 SharePoint 触发器动态内容字段。

在代码视图中编写。每个 JSON 值都是两个引号之间的 SharePoint 数据块,因此数字和日期会以字符串的形式传入,供 Handlebars 模板渲染。

提示。 保持项目数组的大小固定,与您添加到 SharePoint 的列数相匹配(本示例中为五列)。如果一行只有三个项目,则在 SharePoint 中将 Item4/Item5 留空,并添加一个 {{#if description}} 在 Handlebars 模板中,围绕行设置保护机制,以便跳过空行。

参考:SharePoint 列到 Handlebars 路径

SharePoint 列与其在模板中位置的精确映射关系。扩展架构时,请将此表添加至书签。

SharePoint 列车把路径类型用于模板
Titleinvoice.number文本发票编号标题和 Dropbox 文件名
InvoiceDateinvoice.date日期发票抬头
DueDateinvoice.dueDate日期发票抬头
CustomerNamecustomer.name文本阻止法案
CustomerAddresscustomer.address文本阻止法案
CustomerEmailcustomer.email文本阻止法案
Item{N}Descriptionitems[N-1].description文本行项目行
Item{N}Qtyitems[N-1].quantity数字行项目行
Item{N}UnitPriceitems[N-1].unitPrice数字行项目行
Item{N}Amountitems[N-1].lineTotal数字行项目行
Currencytotals.currency 以及每个 items[].currency文本货币符号
Subtotaltotals.subTotal数字总计块
TaxRatetotals.taxRate数字总计块
TaxAmounttotals.taxAmount数字总计块
GrandTotaltotals.grandTotal数字总计块
Notesnotes文本页脚

步骤 3:如何从 SharePoint 加载 Handlebars 模板文件?

目前为止的流程: SharePoint 触发器 + 撰写。

将模板存储为纯文本格式 .html 该文件位于网站的“文档”库中。“使用路径获取文件内容”操作会读取其原始字节,以便“生成文档(单个)”操作可以将其用作模板正文。

模板本身

模板是普通的 HTML,带有内联 CSS,以及用于存储数据的 Handlebars 表达式。实际工作由两个结构完成。 {{#each items}} 每个行项目重复一行表格,并且 {{#if description}} 内部的守卫会跳过未使用的 Item4 和 Item5 列留下的空白。

<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>

其他所有项目均可直接替代: {{invoice.number}} 在标题中, {{customer.*}} 阻止账单支付, {{totals.*}} 在总计表中,以及 {{notes}} 在页脚处。

下载模板。 上传到 /Shared Documents/ 作为 invoice_template.html然后编辑顶部的卖家名称、地址和增值税号。这些信息是固定的,所以在首次运行之前,您只需要修改这几行。

  1. 添加 SharePoint > 使用路径获取文件内容
  2. 配置
    • 网站地址与触发点位于同一位置。
    • 文件路径/Shared Documents/invoice_template.html
    • 推断内容类型Yes (保留默认设置)。

使用路径获取文件内容

使用 Power Automate SharePoint 获取文件内容(使用路径操作),站点地址为 PDF4me SharePoint,文件路径为 /SharedDocuments/invoice_template.html,并推断内容类型为“是”。

模板存在于 /Shared Documents/ 并通过绝对路径获取。版本历史记录是自动生成的,因为它只是一个 SharePoint 文件。

提示。 如果您的模板存储在 OneDrive 或 Dropbox 中,请将此操作替换为相应存储平台的“获取文件内容”操作。 Body 它们中的任何一个的输出都将作为下一步提供给模板文件数据。


步骤 4:PDF - 生成文档(单个)如何填充 Handlebars 模板?

目前为止的流程: SharePoint触发器+撰写+使用路径获取文件内容。

Generate Document (Single) 是模板引擎。它读取 Handlebars 源代码({{invoice.number}}{{#each items}}...{{/each}}),替换 JSON 有效负载中的值,并返回渲染后的 HTML。它不进行分页。分页是下一步的工作。

  1. 添加 PDF4me PDF > PDF - 生成文档(单个)
  2. 配置
    • 模板文件类型Html (Handlebars Syntax)
    • 模板文件名invoice_template.html
    • 模板文件数据动态内容, Body 来自 SharePoint 获取文件内容步骤。
    • 文档数据类型Json
    • 文档数据文本动态内容 Body 从“编写”步骤开始。
    • 输出类型Html
    • 保持PDF模板可编辑No

生成文档(单个)配置

PDF4me PDF - 生成文档(单个)操作,模板文件类型为 HTML(Handlebars 语法),模板文件名为 invoice_template.html,模板文件数据映射自 SharePoint 正文,文档数据类型为 JSON,文档数据文本映射自撰写正文,输出类型为 HTML,PDF 模板是否可编辑为“否”,并已连接到 PDF4me PDF 状态

输出类型为 Html, 不是 Pdf.生成文档(单页)将渲染后的 HTML 传递给下一步,因此分页仍然是一个单独的、可测试的问题。

提示。 “生成文档(单个)”功能也支持 Word 和 PDF 模板。如果设计团队交给您一个 .docx 发票样机,将模板文件类型设置为 Word 并将输出类型更改为 Pdf 完全跳过转换步骤。如果您需要 CSS 控制和浏览器预览迭代,Handlebars 方案是最佳选择。


步骤 5:如何将渲染后的 HTML 分页到 A4 PDF 中?

目前为止的流程: SharePoint 触发器 + 撰写 + 使用路径获取文件内容 + PDF - 生成文档(单个)。

“将 HTML 转换为 PDF”是分页引擎。它读取“生成文档(单行)”生成的 HTML,应用页面大小和边距,并返回 PDF 字节。

  1. 添加 PDF4me PDF > 将 HTML 转换为 PDF
  2. 配置
    • 文件内容动态内容 Body 从“生成文档(单个)”步骤。
    • HTML文件名invoice.html
    • 页面布局Portrait
    • 页面大小A4
    • 规模0.8 (5 项商品的发票可以放在一页上)。
    • 上/下/左/右边距40px 每个。
    • 打印背景Yes (渲染总计块的背景颜色)。

将 HTML 转换为 PDF 配置

PDF4me 将 HTML 转换为 PDF 操作,文件内容映射自“生成文档正文”,HTML 文件名为 invoice.html,页面布局为纵向,页面大小为 A4,缩放比例为 0.8,上下左右边距均为 40px,打印背景为“是”。

0.8 的字体大小可以将五行发票显示在一张 A4 纸上。如果商品种类较少,需要更大的字体,可以将字体大小调整为 0.9 或 1.0。

提示。 Print Background: Yes 是最终使彩色化的背景 <td> 单元格和 CSS 渐变会显示出来。浏览器默认会移除打印时的背景颜色。如果您的 PDF 中总计行显示为白色,这就是原因。


步骤 6:如何将发票 PDF 保存到 Dropbox 并设置一个易于理解的名称?

目前为止的流程: SharePoint 触发器 + 撰写 + 使用路径获取文件内容 + PDF - 生成文档(单个) + 将 HTML 转换为 PDF。

最后一步是将 PDF 文件放入一个 Dropbox 文件夹中,文件夹名称与发票号码关联。

  1. 添加 Dropbox > 创建文件
  2. 配置
    • 文件夹路径/ (或者类似这样的子文件夹) /invoices/)。
    • 文件名动态内容 Title 来自 SharePoint 触发器,后跟字面字符串 .pdf. INV-1005 变为 INV-1005.pdf
    • 文件内容动态内容 Body 来自“将 HTML 转换为 PDF”步骤。

创建文件配置

使用 Power Automate 创建 Dropbox 文件操作,文件夹路径为 /,文件名由 SharePoint 标题触发字段生成,后跟 .pdf,文件内容映射自“将 HTML 转换为 PDF 正文”,并显示已连接到 Dropbox 的状态

将文件命名为发票号码,Dropbox 文件夹就会自动变成一个可搜索、去重的发票存档。

提示。 如果两行数据可能共享同一个标题,则添加一个 _ 以及时间戳: concat(triggerBody()?['Title'], '_', ticks(utcNow()), '.pdf')否则,Dropbox 会默默地覆盖之前同名的文件。


运行流程并验证

  1. 节省 右上角的流水。
  2. 向……添加新行 Invoices SharePoint 列表。将标题设置为易于识别的内容(INV-1005)并填写每一列,使模板包含真实数据。
  3. 打开流程 运行历史记录 并选择最新运行结果。所有卡片都应显示为绿色,与流程概览截图类似。“将 HTML 转换为 PDF”卡片速度最慢(约 11 秒),因为分页操作在此处进行。
  4. 打开 Dropbox 并确认 INV-1005.pdf (或您的标题)位于根目录。下载并打开它,然后与示例进行比较。

你实际建造了什么? 这是一个基于 SharePoint 的原生发票生成器,带有可编辑的 HTML 模板,所有功能都集成在六个标准层连接器操作中。同样的模式(行 + 模板 + 渲染 + 分页 + 存储)也适用于报价单、送货单、采购订单、保修证书或任何按行创建品牌标识的 PDF 文件。您可以将 SharePoint 替换为 Dataverse 或 Excel,将 Dropbox 替换为 OneDrive,并保留两个 PDF4me 操作。


无需重建即可添加的常见变体

将发票通过电子邮件发送给客户
插入一个 Outlook 发送电子邮件(V2) 创建文件后,附加“将 HTML 转换为 PDF”的选项。 Body 并将其发送到 SharePoint CustomerEmail 柱子。
在第1页盖上签名章
添加一个 PDF签名 将 HTML 转换为 PDF 后执行的操作:在已授权发票的第一页右下角叠加来自 Dropbox 的 PNG 签名。
将副本推送回 SharePoint
再加一个 SharePoint 创建文件 将 PDF 文件放入 Dropbox 后,再将其拖放到 Shared Documents/Signed Invoices/ 因此,它会被保存在源列表旁边。
Convert 与 Adobe / Encodian(对比)
Adobe PDF Services 和 Encodian 都提供 HTML 转 PDF 连接器,但都需要为每个用户购买高级许可证。PDF4me 基于标准连接器层运行,并结合“生成文档(单页)”进行模板生成,而 Adobe 的流程中并不包含此功能。

常见问题

如何使用 Power Automate 从 SharePoint 列表项创建 PDF?

使用 SharePoint 的 When an item is created 作为触发器, Compose 执行将行的扁平列转换为嵌套 JSON 有效负载的操作 Get file content using path 从以下位置加载您的 HTML 模板: /Shared Documents/PDF4me Generate Document (Single) 将 JSON 合并到模板中,并使用 PDF4me Convert HTML to PDF 对结果进行分页。将输出保存到任意文件连接器(Dropbox、OneDrive、SharePoint)。该链中的每个操作都使用标准连接器层,因此您无需 Power Automate Premium 许可证。

PowerAutomatic能否生成PDF文件?

是的。Power Automate 本身无法根据 HTML 模板渲染 PDF,但是…… PDF4me 连接器添加了使之成为可能的两个操作: Generate Document (Single) 用于模板渲染和 Convert HTML to PDF 用于分页。两者都属于标准版,可免费安装。它们配合使用,可以将 SharePoint/Dataverse/Excel 中的任何一行数据转换为带有品牌标识的 PDF 文件,所用模板为可编辑的 HTML 格式,存储在数据旁边。

如何在 Power Automate 中从 HTML 创建 PDF?

添加 PDF4me 将 HTML 转换为 PDF 在流程中任何包含 HTML 的内容处执行操作(例如 Compose 输出、获取文件内容正文、Compose 表达式、Webhook 有效负载)。配置页面大小(A4), 布局 (Portrait),边距(40px),并设置 Print Background: Yes 因此,CSS背景得以保留。该操作的 Body 输出文件是您提供给存储操作的 PDF 二进制文件。这与上面步骤 5 中使用的操作相同。

PowerAutomatic 能否在不付费的情况下将 HTML 转换为 PDF?

是的。PDF4me 连接器的“将 HTML 转换为 PDF”操作属于标准连接器层级,这意味着您可以将其安装并用于任何 Power Automate 计划,而无需像原生连接器那样升级到高级许可证。 Convert File Adobe PDF Services 连接器也需要此功能。您仍然需要一个 PDF4me API 密钥(提供免费版本),在首次添加操作时粘贴该密钥即可。

如何在 Power Automate 中根据模板生成 PDF?

使用 PDF4me 生成文档(单个)Template File Type: Html (Handlebars Syntax) (适用于 HTML 模板) Word (为了 .docx (模板)。将模板字节馈送到 Template File Data 并将 JSON 有效负载导入 Document Data Text。 放 Output Type: Html 如果您之后需要分页(例如在本博客中),或者 Pdf 一步即可获取 PDF 文件。该操作支持完整的 Handlebars 语法,包括 {{#each}}{{#if}} 适用于行项目和条件块。


故障排除

车把渲染图 {{invoice.number}} PDF文件中的原文

模板占位符未被替换,这意味着文档数据文本为空或 JSON 格式错误。请打开运行历史记录中“撰写”步骤的输出,并确认它是一个有效的 JSON 对象,且包含 Handlebars 正在寻找的确切键路径(区分大小写)。

PDF 文件中的“总计”行显示为白色,但在浏览器预览中显示为彩色。

Print Background: Yes 在将 HTML 转换为 PDF 时,Chromium 的打印引擎会去除背景颜色。 <td><div> 默认情况下禁用;此开关重新启用它们。

发票共两页,第二页只有一行。

降低 Scale 将 HTML 转换为 PDF 的功能从 0.8 降至 0.7。或者,添加 page-break-inside: avoid<table> 在模板中,分页是在行之间而不是行内断开的。

Dropbox 创建文件时会静默覆盖之前的发票。

两行共享同一 Title将文件名表达式更改为 concat(triggerBody()?['Title'], '_', ticks(utcNow()), '.pdf') 因此,每次运行都会生成一个唯一的文件名。


后续步骤

同样的六步模式(行+模板+渲染+分页+名称+存储)可以处理任何可以用HTML描述的按行品牌化的PDF。