在 Power Automate 中生成个性化邀请函并将其合并到一个 PDF 文件中:Dropbox 工作流程的 7 个步骤

批量邮件发送最痛苦的部分不是写信,而是…… 将个性化副本缝合在一起 这样,财务、人力资源或运营部门就能收到一份简洁的PDF文件,而不是五十个附件。本教程将逐步构建出完全相同的模式。 动力自动化 和 PDF4me 生成文档(多个), 合并多个PDF文件, Dropbox以及一个“应用到每个”循环。七个流程操作。一个 DOCX 模板。一个收件人 JSON 数组。最终生成一个合并的 PDF 文件,每个收件人一页,自动命名并上传回 Dropbox。
Dropbox 的两个步骤构成了整个流程。PDF4me 的“生成文档(多个)”功能会为每个收件人生成一个个性化的 PDF 文件。“应用到每个”循环会包裹所有操作。 流文件 在 base64ToBinary(...) 并将其添加到数组变量中。PDF4me 的“合并多个 PDF 文件”功能会将该数组拼接成一个合并后的 PDF 文件。Dropbox 创建文件 将其写回。该流程在处理两个收件人的批次时运行时间不到一分钟,并且可以线性扩展。除了一个自定义表达式之外,没有其他自定义表达式。 base64 转二进制 称呼。
基于原因的问答
为什么生成多个文档而不是单个文档? 单次处理模式接收一条记录并生成一个 PDF 文件。要生成 N 个 PDF 文件,需要调用 N 次,每次调用都会添加一个计费事件和一个网络往返次数。(多次处理模式)一次性调用整个 JSON 数组,并将 N 个 PDF 文件一起返回。 正文/输出文档一次通话,一次计费事件,完整批次。
为什么需要数组变量并加上“应用到每个变量”的选项? “生成文档(多个)”会将每个 PDF 文件作为 base64 字符串输出。 流文件合并多个 PDF 文件需要一组二进制文件。“应用到每个”循环连接了这两个过程:将每个 base64 字符串转换为二进制文件。 base64ToBinary(...) 并将其推送到名为 合并文件循环结束后,数组就是合并操作所期望的集合。
为什么选择 DOCX 而不是 PDF 作为模板? DOCX 合并令牌(<<[名字]>>, <<[HC_WoM_Date]>>PDF4me引擎可以直接读取正文中的字段。PDF模板需要预先设置表单域结构,这对于一封信函来说有点多余。Word、Office 365和Google Docs等软件也支持导出DOCX格式,因此作者无需离开写作工具即可编辑模板。
为什么要合并成一个PDF文件呢? 合规性审查、批量打印、签名审计跟踪和后续归档都更倾向于使用一个合并的 PDF 文件,而不是多个附件。如果您需要恢复单个文件,只需将其删除即可。 按页数拆分 PDF = 1 在步骤 7 之前采取行动,你就可以同时拥有这两个世界,而无需重建其余流程。
您将获得
输入: 一个包含 DOCX 模板 <<[merge_token]>> 占位符 /blog data/merge blog template/template.docx此外,还需要将收件人的 JSON 数组粘贴到“生成文档(多个)”操作中。 输出: 一个名为 Merged_files.pdf 已上传至 /blog data/merge blog template/output每个收件人对应一个个性化页面,顺序与 JSON 数组一致。模板保留在其源文件夹中,因此重复运行是幂等的。
你需要什么
- 动力自动化。 打开 Power Automate任何包含高级连接器的套餐(PDF4me Connect 属于高级套餐)。
- PDF4me API密钥。 获取您的 API 密钥首次添加 PDF4me 操作时进行连接。
- Dropbox模板的来源,合并后 PDF 的目标位置。SharePoint、OneDrive 和 Google Drive 使用各自的连接器,工作方式相同。
- 带有合并标记的 DOCX 模板使用双尖括号语法(
<<[字段名]>>)。该攻略使用template.docx, 你可以 下载本教程中使用的确切模板 然后将其上传到 Dropbox,以镜像每个屏幕截图。 - 收件人 JSON 数组每个收件人一个对象,键与模板标记完全匹配。 下载示例 JSON。
请先获取示例文件。 降低 模板.docx 进入 /博客数据/合并博客模板/ 将 JSON 文件保存在你的 Dropbox 中,并记在草稿本上。下面每个屏幕截图中的值都将与你在自己的流程中看到的内容一致。
流程概览
- 手动触发流程 (扳机)。
- Dropbox:使用路径获取文件内容阅读
template.docx来自 Dropbox。 - PDF4me:生成文档(多个)输入模板和收件人 JSON 数组,输出个性化 PDF 数组。
- 初始化变量 命名
mergefiles(大批)。 - 适用于每个 在
body/outputDocuments, 和 追加到数组变量 使用base64ToBinary(...)里面。 - PDF4me:将多个 PDF 文件合并成一个 PDF 文件输入二进制文件数组,输出一个 PDF 文件。
- Dropbox:创建文件. 写
Merged_files.pdf返回 Dropbox。
完整流程概述

七个操作。每张卡片配置完成后都会显示一个绿色勾号。PDF4me 位于中间位置两次:一次用于生成 PDF,一次用于合并 PDF。
步骤 0:DOCX 模板
在任何流程运行之前,模板需要正确的合并令牌。 <<[FieldName]>> 每个收件人的占位符会被替换一次。拼写和大小写必须与 JSON 键完全一致。
模板预览

DOCX 文件使用双尖括号语法。不包含特殊字符,不包含 XML,只有 PDF4me 引擎直接读取的字面占位符。
步骤 1:手动触发流程
目前为止的流程: 仅触发。
- 在 动力自动化 点击 创造, 选择 瞬间云流。
- 挑选 手动触发流程 作为触发因素。
- 给流程命名(例如:
Bulk Invitation Mailout)并点击 创造。 - 暂时将触发器输入留空。真正的生产触发器(HTTP 请求、SharePoint 列表更新、计划任务)将在流程的其他部分运行正常后在此处添加。
步骤 2:Dropbox:使用路径获取文件内容
目前为止的流程: 触发器 + 获取文件内容。
将 DOCX 模板以原始字节的形式读取到流程中,以便“生成文档”可以直接使用它。
- 点击 + 新步骤, 搜索 Dropbox, 挑选 使用路径获取文件内容。
- 连接 如果你还没有Dropbox的话。
- 配置:
- 文件路径:
/blog data/merge blog template/template.docx - 推断内容类型:
Yes
- 文件路径:
- 节省 执行流程并快速测试。该操作返回一个
File Content包含模板二进制文件的令牌。
获取文件内容配置

如果选择“推断内容类型为是”,则下游 PDF4me 操作会将文件视为真正的 DOCX 文件,而不是通用流。
步骤 3:PDF4me:生成文档(多个)
目前为止的流程: 触发 + 获取文件内容 + 生成文档(多个)。
在这里,一个 DOCX 文件加上一个 JSON 数组,只需一次操作调用即可生成 N 个个性化 PDF 文件。
- 点击 + 新步骤, 搜索 PDF4me, 挑选 生成文档(多个)。
- 连接 PDF4me 连接时请使用您的 API 密钥(仅限首次连接)。
- 配置 动作的上半部分:
- 模板文件类型:
Docx - 模板文件名:
Test.docx(仅标签,非路径) - 模板文件数据选择 文件内容 第二步的令牌
- 文档数据类型:
Json
- 模板文件类型:
步骤 3a:行动的开始

- 粘贴 JSON 数组 进入 文档数据文本该演示使用了两个接收者(John Doe,X AB)。每个对象都有相同的 19 个键,每个键都匹配一个
<<[Token]>>在 DOCX 模板中。
步骤 3b:JSON 有效负载

[
{
"DebtorNumber": "100001",
"Salutation": "Mr",
"Title": "Dr.",
"FirstName": "John",
"LastName": "Doe",
"CareOfAddress": "c/o Accounting Department",
"Address": "123 Main Street",
"POBox": "PO Box 123",
"PostalCode": "10001",
"City": "New York",
"Country": "United States",
"HC_Name": "ABC Business Association",
"SalutationText": "Dear Dr. Doe",
"HC_Phone": "+1-212-555-0100",
"HC_WoM_RegistrationDeadline": "2026-05-22",
"HC_Street": "500 Park Avenue",
"HC_PostalCodeCity": "10022 New York",
"HC_WoM_Date": "2026-05-29",
"HC_WoM_Time": "10:00"
},
{
"DebtorNumber": "100001",
"Salutation": "Mr",
"Title": "Dr.",
"FirstName": "X",
"LastName": "AB",
"CareOfAddress": "c/o Accounting Department",
"Address": "123 Main Street",
"POBox": "PO Box 123",
"PostalCode": "10001",
"City": "New York",
"Country": "United States",
"HC_Name": "ABC Business Association",
"SalutationText": "Dear Dr. Doe",
"HC_Phone": "+1-212-555-0100",
"HC_WoM_RegistrationDeadline": "2026-05-22",
"HC_Street": "500 Park Avenue",
"HC_PostalCodeCity": "10022 New York",
"HC_WoM_Date": "2026-05-29",
"HC_WoM_Time": "10:00"
}
]
- 配置 下半部分:
- 字段元数据:留空(可选,用于货币、日期或数字格式设置)
- 输出类型:
PDF - 保持PDF模板可编辑:
No
步骤 3c:输出类型

- 保存并测试操作返回
body/outputDocuments一个对象数组,每个对象对应一个接收者。每个对象携带一个streamFile包含个性化 PDF 的 base64 字符串属性。
提示。 缺失的 JSON 键在输出 PDF 中会显示为空字符串,而不是错误信息。这虽然可以容忍部分数据,但也意味着拼写错误会悄无声息地导致失败。上线前,请务必将您的令牌列表与 JSON 键进行比对,因为两者都区分大小写。
步骤 4:初始化变量合并文件
目前为止的流程: 触发器 + 获取文件内容 + 生成文档(多个) + 初始化变量。
合并操作需要一个二进制文件集合。请创建一个空数组来保存这些文件。
- 点击 + 新步骤, 挑选 初始化变量。
- 配置:
- 姓名:
mergefiles - 类型:
Array - 价值:留空
- 姓名:
初始化变量配置

初始化变量始终在第一个需要它的“应用到每个对象”操作之前执行。Power Automate 在设计时强制执行此规则。
步骤 5:应用到每个数组变量并追加
目前为止的流程: 触发器 + 获取文件内容 + 生成文档(多个) + 初始化变量 + 应用于每个。
遍历 PDF 文件,并将每个文件转换为二进制缓冲区。
步骤 5a:应用于每个(选择来源)
- 点击 + 新步骤, 挑选 适用于每个。
- 配置:
- 从之前的步骤中选择一个输出。: 挑选
body/outputDocuments从“生成文档(多个)”操作
- 从之前的步骤中选择一个输出。: 挑选

步骤 5b:追加到数组变量(在循环内)
- 在“应用到每个容器”按钮中 添加操作, 挑选 追加到数组变量。
- 配置:
- 姓名:
mergefiles - 价值 (表达式,点击)
fx):base64ToBinary(items('Apply_to_each')?['streamFile'])
- 姓名:

这是把所有事情联系起来的关键所在。 生成文档(多个)会生成 base64 字符串 流文件合并多个PDF文件需要二进制缓冲区。 base64ToBinary(...) 它是桥梁。如果没有它,合并操作会因“内容无效”而报错。
步骤 6:PDF4me:将多个 PDF 文件合并为一个 PDF 文件
目前为止的流程: 触发 + 获取文件内容 + 生成文档(多个) + 初始化变量 + 应用于每个 + 合并多个 PDF。
现在把所有数据输入进去,然后输出一个PDF文件。
- 在“应用到每个循环”下方单击 + 新步骤, 搜索 PDF4me, 挑选 将多个 PDF 文件合并成一个 PDF 文件。
- 配置:
- 正文/文档内容选择
mergefiles变量标记 - 输出文件名:
Test.pdf
- 正文/文档内容选择
合并操作配置

- 该操作会将 PDF 文件连接起来。 数组顺序这就是 JSON 的顺序。如果您的下游用户期望特定的排序方式(例如按字母顺序、按债务人编号或按地区),请在步骤 3 之前对 JSON 进行排序,后续流程将保持该顺序。
提示。 每次运行都需要不同的输出文件名?使用动态构建方式 concat('Invitations_', utcNow('yyyy-MM-dd'), '.pdf') 在“输出文件名”字段中输入日期。合并后的 PDF 文件会带有日期戳,并且重复运行不会互相覆盖。
步骤 7:Dropbox:创建文件
目前为止的流程: 触发 + 获取文件内容 + 生成文档(多个) + 初始化变量 + 应用于每个 + 合并多个 PDF + 创建文件。
合并后的PDF文件写回Dropbox。
- 点击 + 新步骤, 挑选 Dropbox, 创建文件。
- 配置:
- 文件夹路径:
/blog data/merge blog template/output - 文件名:
Merged_files.pdf - 文件内容选择 文件内容 第 6 步(合并多个 PDF)中的令牌
- 文件夹路径:
- 节省 流动。
创建文件配置

运行流程并验证
- 点击 测试 在右上角,选择 手动, 点击 测试, 然后 运行流程。
- 流程执行面板会逐个操作显示绿色。“生成文档(多个)”操作通常每个单页模板的记录需要一秒钟。“合并多个 PDF”操作(针对两个收件人)则需要额外一到两秒钟。
- 打开 Dropbox
/blog data/merge blog template/output/文件Merged_files.pdf有没有。
输出结果并排显示


你实际建造了什么? 这是一款零接触批量邮件发送工具,可将单个 DOCX 信函和收件人 JSON 列表合并为一个 PDF 文件,方便打印、签名、存档或作为附件使用。无论收件人数量是两位还是两千位,此模式均无需更改任何字段值。该模式也适用于 Make(迭代器 + PDF4me 合并模块)和 Zapier(Zapier 循环 + PDF4me 合并操作)。
无需重建即可添加的常见变体
合并文件.pdf 邮件会直接发送到财务、运营或印刷部门,无需经过 Dropbox 的往返传输。PDF/A-2b. Dropbox 副本即可用于存档,并符合 ISO 19005 标准。故障排除
这 价值 添加到数组中的表达式未包装在 base64ToBinary(...)如果没有进行转换,合并操作将接收 base64 字符串而不是二进制缓冲区。重新打开“追加到数组”操作,切换到表达式编辑器,然后粘贴 base64ToBinary(items('Apply_to_each')?['streamFile']) 逐字。
JSON 键与模板标记不匹配。“生成文档(多个)”会将缺失的键替换为空字符串,虽然这种做法容错性较高,但会导致拼写错误时无法正确处理。请将您的 DOCX 标记列表与 JSON 键进行比较,两者都区分大小写。
“应用到每个”循环正在迭代错误的源。打开循环,确认一下。 从之前的步骤中选择一个输出。 指向 正文/输出文档 (数组),而不是单个记录的单个属性。
页面顺序与 JSON 顺序一致。在执行“生成文档(多个)”之前,请使用以下方法对 JSON 数组进行排序: 选择 或者 撰写 采取行动,使收件人按您需要的顺序到达。
后续步骤
在 Power Automate 中,同样的七步模式(触发、获取模板、生成批处理、循环转换为数组、合并、保存)适用于任何批量个性化邮件发送。发送一封邮件后,后续邮件的成本几乎为零。