在 Power Automate 中自动合并拖放到 Dropbox 文件夹中的每个 PDF 文件:6 步动态工作流程

“合并这些PDF”工单最痛苦的部分不是合并本身,而是…… 知道运行时文件夹中包含什么内容名称会更改,文件会添加和删除,有人在下午 4:55 添加了第五个文档。本教程将构建出完全相同的模式。 动力自动化 和 PDF4me 合并多个 PDF 文件, Dropbox以及一个“应用到每个”循环。六个流程操作。零硬编码文件名。当有新文件到达时,监控文件夹中当前的所有 PDF 文件都会被拼接在一起,输出名称会包含文件计数,因此每次运行都具有唯一标识。
A 创建文件时 每次上传新文件时,Dropbox 触发器都会触发。 列出文件夹中的文件 返回文件夹中当前每个文件的快照(本次运行中,共有四个 PDF 文件): PDF_Sample.pdf, 示例 3 页.pdf, 示例pdf.pdf, 示例.pdf)。“Apply to each”循环遍历该列表,并调用 获取文件内容 按 ID 推送 base64ToBinary(body('Get_file_content')?['$content']) 写入名为 文件PDF4me 的 合并多个PDF文件 Dropbox 会读取数组并生成一个 PDF 文件。 创建文件 将其写回为 merge-4.pdf因为有四个输入文件。明天再添加第五个文件,下次运行就会产生结果。 合并-5.pdf 自动地。
基于“为什么”的问答
为什么要同时使用触发器和列出文件夹中的文件? 触发器会提供一个新文件事件,但不能保证提供文件夹中所有其他文件的最新列表。 列出文件夹中的文件 快照会在运行时记录当前状态,因此合并始终准确反映磁盘上当前的内容,而不是触发器触发时或流程设计时的内容。
为什么使用 ID 而不是路径来获取数据? 文件名可能会冲突或更改。Dropbox ID 稳定、唯一且不受重命名影响。映射 ID 从列表文件到 获取文件内容 这意味着即使用户在批处理过程中重命名文件,或者两个文件在不同的子文件夹中具有相同的显示名称,循环仍然会继续工作。
为什么 base64ToBinary(...) 在 $content? Dropbox 获取文件内容 返回以 base64 字符串形式包装的文件。 $content 属性。PDF4me 的“合并多个 PDF 文件”操作需要的是二进制缓冲区集合,而不是 base64 字符串。 base64ToBinary(body('Get_file_content')?['$content']) 是连接文件与数组的桥梁,它会在文件到达数组的那一刻立即进行转换。
为什么要构建输出文件名? concat() 和 长度()? 硬编码 输出.pdf 这意味着每次运行都会覆盖上次运行的结果。 concat('merge-', string(length(body('List_files_in_folder'))), '.pdf') 文件名中会标记文件计数,因此连续运行的文件会以这样的形式出现: 合并-3.pdf, merge-4.pdf, 合并-5.pdf额外提示:快速查看输出文件夹即可了解每次处理的文件数量。
您将获得
输入: 一个 Dropbox 文件夹 /blog data/merge files dropbox 它可以容纳你拖放到其中的任何 PDF 文件。本教程使用了四个 PDF 文件: PDFA_Sample.pdf, sample_3_page.pdf, sample_pdf.pdf, sample.pdf。 输出: 单个合并的 PDF 文件 /blog data/merge blog template/output/ 命名 merge-N.pdf 在哪里 N 这是运行时的文件数量。添加更多文件后,下次运行时会自动读取它们。
运行前的 Dropbox 文件夹

运行后的 Dropbox 文件夹

第二次运行后,文件夹中有四个文件,因此输出结果为: merge-4.pdf前一轮比赛有三场。
你需要什么
- 动力自动化。 打开 Power Automate任何包含高级连接器的套餐(PDF4me Connect 属于高级套餐)。
- PDF4me API密钥。 获取您的 API 密钥首次添加 PDF4me 操作时进行连接。
- Dropbox输入 PDF 文件的源文件夹,合并后输出文件的目标文件夹。SharePoint、OneDrive 和 Google Drive 与其对应的连接器功能完全相同。
- 少量PDF文件任意尺寸,任意组合。本教程使用了四个示例: PDF_Sample.pdf, 示例 3 页.pdf, 示例pdf.pdf, 示例.pdf将它们放入其中,即可镜像每个屏幕截图。
首先获取输入集和预期输出。 将四个样本下载到 博客数据/合并文件 Dropbox 将流程保存到您的 Dropbox,然后发布流程。首次运行应该会生成一个 merge-4.pdf 与此处链接中的完全相同。
流程概览
- Dropbox:当创建文件时 (扳机)。
- Dropbox:列出文件夹中的文件返回当前监视文件夹中的所有文件。
- 初始化变量 命名
Files(大批)。 - 适用于每个 在
body('List_files_in_folder'):- Dropbox:获取文件内容 经过
Id。 - 追加到数组变量 和
base64ToBinary(body('Get_file_content')?['$content'])。
- Dropbox:获取文件内容 经过
- PDF4me:将多个 PDF 文件合并成一个 PDF 文件。
Files在,Output.pdf出去。 - Dropbox:创建文件。 文件名
concat('merge-', string(length(body('List_files_in_folder'))), '.pdf')。
完整流程概述

六个操作。“应用于每张卡片”显示“1/4”,因为受监视的文件夹在运行时包含四个 PDF 文件。
步骤 1:Dropbox:当创建文件时(触发)
目前为止的流程: 仅触发。
- 在 动力自动化 点击 创造, 选择 自动化云流。
- 给流程命名(例如:
Auto-Merge Dropbox Folder), 挑选 Dropbox:当创建文件时 以点击作为触发器 创造。 - 连接 如果你还没有Dropbox的话。
- 配置:
- 文件夹:
/blog data/merge files dropbox - 高级参数:保持默认值(显示 0/1)。
- 文件夹:
触发器配置

触发器会轮询被监控的文件夹,并在每次有新上传文件时触发。默认轮询频率因套餐而异,通常为 1 到 5 分钟。
步骤 2:Dropbox:列出文件夹中的文件
目前为止的流程: 触发器 + 列出文件夹中的文件。
触发器会在单个新文件创建时触发。合并操作需要文件夹中当前存在的所有 PDF 文件。 列出文件夹中的文件 在运行时获取文件夹内容的最新快照。
- 点击 + 新步骤, 搜索 Dropbox, 挑选 列出文件夹中的文件。
- 配置:
- 文件夹:
/blog data/merge files dropbox(与触发器路径相同)
- 文件夹:
列出文件配置

- 动作返回
body('List_files_in_folder')一个文件元数据对象数组。每个对象携带Id,Name,DisplayName,Path,LastModified, 和Size下一步将遍历这个数组。
提示。 如果您的文件夹包含混合内容(PDF、图像和 Office 文档),而您只想合并 PDF,请添加一个 过滤器数组 此步骤之后的操作表达式 endsWith(toLower(item()?['Name']), '.pdf') 并将过滤后的数组输入到循环中。
步骤 3:初始化变量文件
目前为止的流程: 触发器 + 列出文件 + 初始化变量。
合并操作需要一组二进制文件。请分配一个空数组来收集这些文件。
- 点击 + 新步骤, 挑选 初始化变量。
- 配置:
- 姓名:
Files - 类型:
Array - 价值:留空
- 姓名:
初始化变量配置

步骤 4:应用于每个文件并获取文件内容,然后追加到数组
目前为止的流程: 触发器 + 列出文件 + 初始化变量 + 应用于每个。
这是流程的核心。遍历快照返回的每个文件,获取其字节,转换为二进制,然后推送到 Files。
步骤 4a:应用于每个(选择来源)
- 点击 + 新步骤, 挑选 适用于每个。
- 配置:
- 从之前的步骤中选择一个输出。 (表达):
body('List_files_in_folder')
- 从之前的步骤中选择一个输出。 (表达):

步骤 4b:获取文件内容(在循环内部)
- 在循环内点击 添加操作, 挑选 Dropbox:获取文件内容。
- 配置:
- 文件选择 ID 从“列出文件夹动态内容中的文件”中提取令牌(它会自动解析为当前项的 ID)。
- 推断内容类型:
Yes(在高级参数下)

步骤 4c:追加到数组变量(在循环内)
- 下面获取文件内容, 添加操作, 挑选 追加到数组变量。
- 配置:
- 姓名:
Files - 价值 (表达式,点击)
fx):base64ToBinary(body('Get_file_content')?['$content'])
- 姓名:

这是把所有事情联系起来的关键所在。 Dropbox 将每个文件返回为 { "$content": "<base64 string>", "$content-type": "application/pdf" }合并操作需要一个二进制缓冲区。 base64ToBinary(...) 在 $content 连接两者。跳过转换和合并操作,因为会因“内容无效”而出错。
步骤 5:PDF4me:将多个 PDF 文件合并为一个 PDF 文件
目前为止的流程: 触发器 + 列出文件 + 初始化变量 + 应用于每个 + 合并多个 PDF。
整个数组输入后,会输出一个PDF文件。
- 在“应用到每个循环”下方单击 + 新步骤, 搜索 PDF4me, 挑选 将多个 PDF 文件合并成一个 PDF 文件。
- 连接 PDF4me 连接时请使用您的 API 密钥(仅限首次连接)。
- 配置:
- 正文/文档内容选择
Files变量标记 - 输出文件名:
Output.pdf
- 正文/文档内容选择
合并操作配置

- 这些PDF文件被连接起来。 数组顺序这是 Dropbox 返回文件的顺序(通常按名称字母顺序排列)。如果您需要不同的顺序,请进行排序。
body('List_files_in_folder')与一个 选择 循环之前的操作,例如通过LastModified按最新发布顺序排列。
提示。 内部 输出.pdf 这里的名称只是 PDF 元数据标题,并非 Dropbox 文件名。真正的 Dropbox 文件名在步骤 6 中设置。请将其保留为稳定的占位符,以便您可以在 Power Automate 运行历史记录中按此名称搜索流程运行。
步骤 6:Dropbox:创建具有动态文件名的文件
目前为止的流程: 触发器 + 列出文件 + 初始化变量 + 应用于每个 + 合并多个 PDF + 创建文件。
将合并后的 PDF 文件写回 Dropbox,文件名由运行时计算得出,其中包含文件计数。
- 点击 + 新步骤, 挑选 Dropbox:创建文件。
- 配置:
- 文件夹路径:
/blog data/merge blog template/output - 文件名 (表达式,点击)
fx):concat('merge-', string(length(body('List_files_in_folder'))), '.pdf') - 文件内容选择 文件内容 来自“合并多个 PDF”操作的令牌
- 文件夹路径:
文件名表达式

最终行动准备就绪

同样的表达式也揭示了 页眉/页数 合并输出时,如果您想要记录合并后的 PDF 文件包含多少页,这将非常有用。
提示。 如果您希望在运行记录中添加日期而不是文件计数,请将表达式替换为 concat('merge-', utcNow('yyyy-MM-dd-HHmmss'), '.pdf')文件以以下形式返回: merge-2026-06-12-094501.pdf 重播节目永远不会冲突。
运行流程并验证
- 节省 右上角的流水。
- 将一个(或四个)文件拖放到
/blog data/merge files dropbox任何方法都可以,轮询间隔会在几分钟内触发。 - 打开 运行历史记录 点击右上角,观察操作图标变为绿色。对每个文件应用操作后,应显示正确的迭代次数,如果文件夹中有四个文件,则显示“1/4”。
- 打开 Dropbox
/blog data/merge blog template/output/一个名为merge-4.pdf正在等待。打开它,输入文件夹中的所有 PDF 文件都已合并成一个文档。
你实际建造了什么? 这是一个零接触整合流程,能够响应每次新上传的文件,在运行时读取整个文件夹状态,并将所有当前文件写入一个唯一命名的 PDF 文件。无需硬编码列表、无需定时批处理作业、无需手动点击。同样的模式可以处理 4 个 PDF 文件,也可以处理 400 个 PDF 文件,无需任何更改。同样的方案也适用于 Make(通过迭代器遍历 Dropbox 文件列表)和 Zapier(通过 Zapier 循环遍历查找文件的结果)。
无需重建即可添加的常见变体
endsWith(toLower(item()?['Name']), '.pdf')循环会忽略 .docx、.png 以及文件夹中的任何其他文件。sort(body('List_files_in_folder'), 'LastModified')反向 撤销(...) 如果您希望最新内容显示在合并后的 PDF 文件的顶部。PDF/A-2b. 传输到 Dropbox 的输出现在符合 ISO 19005 归档标准。/已处理下次运行只会接收新上传的内容。故障排除
添加到数组 价值 表达式未包装 base64ToBinary(...)如果不进行转换,数组中存储的是 base64 字符串而不是二进制缓冲区,PDF4me 会拒绝这些字符串。重新打开“追加到数组”对话框,切换到表达式编辑器,然后粘贴。 base64ToBinary(body('Get_file_content')?['$content']) 逐字。
触发器已触发,但“列出文件”返回的是一个空数组。请检查触发器和“列出文件”数组。 文件夹 两个值完全相同。路径不匹配(一个路径末尾有斜杠,另一个没有)是常见原因。
合并.pdf这 长度() 调用在设计时未解析。请确保已将表达式粘贴到…… 文件名 通过该字段 特效 表达式编辑器,而不是纯文本编辑器。纯文本编辑器会将花括号保留为字面字符,导致函数永远不会执行。
两次连续运行,文件数量相同,产生的文件名也相同(merge-4.pdf)。或者将表达式替换为时间戳(concat('merge-', utcNow('yyyy-MM-dd-HHmmss'), '.pdf')或者附加一个 GUID guid()。
后续步骤
同样的六步模式(监视、列出、循环转换为数组、合并、保存并指定运行时名称)可以处理任何“响应文件夹”的自动化操作。明天放入一个新文件,程序会自动识别。无需编辑,也无需重新部署。