跳到主要内容

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

· 阅读需 25 分钟
SEO and Content Writer

“合并这些PDF”工单最痛苦的部分不是合并本身,而是…… 知道运行时文件夹中包含什么内容名称会更改,文件会添加和删除,有人在下午 4:55 添加了第五个文档。本教程将构建出完全相同的模式。 动力自动化PDF4me 合并多个 PDF 文件Dropbox以及一个“应用到每个”循环。六个流程操作。零硬编码文件名。当有新文件到达时,监控文件夹中当前的所有 PDF 文件都会被拼接在一起,输出名称会包含文件计数,因此每次运行都具有唯一标识。

流程概览
1. When a file is created
Dropbox trigger on /blog data/merge files dropbox. Fires the moment any file lands.
2. List files in folder
Dropbox action on the same folder. Returns every current file as an array of metadata objects.
3. Initialize variable
Name Files, Type Array. Buffer for the binary content of every file.
4. Apply to each
Loop body(List_files_in_folder). Inside, Get file content by Id, then Append to array with base64ToBinary on $content.
5. Merge multiple PDFs
PDF4me action. Body/docContent the Files array, Output File Name Output.pdf. One consolidated PDF out.
6. Create file
Dropbox /blog data/merge blog template/output. File Name expression concat(merge-, length(List_files_in_folder), .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.pdfmerge-4.pdf合并-5.pdf额外提示:快速查看输出文件夹即可了解每次处理的文件数量。


您将获得

输入: 一个 Dropbox 文件夹 /blog data/merge files dropbox 它可以容纳你拖放到其中的任何 PDF 文件。本教程使用了四个 PDF 文件: PDFA_Sample.pdfsample_3_page.pdfsample_pdf.pdfsample.pdf输出: 单个合并的 PDF 文件 /blog data/merge blog template/output/ 命名 merge-N.pdf 在哪里 N 这是运行时的文件数量。添加更多文件后,下次运行时会自动读取它们。

运行前的 Dropbox 文件夹

Dropbox 文件夹 /blog data/merge files 中列出了四个按名称排序的 PDF 文件:PDFA_Sample.pdf(16.5 KB)、sample_3_page.pdf(2.48 KB)、sample_pdf.pdf(2.14 KB)、sample.pdf(97.67 KB),全部设置为“仅您可访问”。

运行后的 Dropbox 文件夹

Dropbox 输出文件夹列表包含 merge-3.pdf(37.22 KB)和 merge-4.pdf(110.78 KB),每个输出文件的名称都以流程运行时涉及的文件数量命名。

第二次运行后,文件夹中有四个文件,因此输出结果为: 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 与此处链接中的完全相同。


流程概览

  1. Dropbox:当创建文件时 (扳机)。
  2. Dropbox:列出文件夹中的文件返回当前监视文件夹中的所有文件。
  3. 初始化变量 命名 Files (大批)。
  4. 适用于每个body('List_files_in_folder')
    • Dropbox:获取文件内容 经过 Id
    • 追加到数组变量base64ToBinary(body('Get_file_content')?['$content'])
  5. PDF4me:将多个 PDF 文件合并成一个 PDF 文件Files 在, Output.pdf 出去。
  6. Dropbox:创建文件。 文件名 concat('merge-', string(length(body('List_files_in_folder'))), '.pdf')

完整流程概述

Power Automate 流程画布显示了从上到下堆叠的六个操作:创建文件时、列出文件夹中的文件、初始化变量、应用于每个包含文件、获取文件内容并追加到数组变量(迭代 4 次)、将多个 PDF 文件合并为一个 PDF 文件、创建文件

六个操作。“应用于每张卡片”显示“1/4”,因为受监视的文件夹在运行时包含四个 PDF 文件。


步骤 1:Dropbox:当创建文件时(触发)

目前为止的流程: 仅触发。

  1. 动力自动化 点击 创造, 选择 自动化云流
  2. 给流程命名(例如: Auto-Merge Dropbox Folder), 挑选 Dropbox:当创建文件时 以点击作为触发器 创造
  3. 连接 如果你还没有Dropbox的话。
  4. 配置
    • 文件夹/blog data/merge files dropbox
    • 高级参数:保持默认值(显示 0/1)。

触发器配置

Power Automate Dropbox:当创建文件时触发,文件夹设置为 /blog data/merge files dropbox,高级参数已折叠,显示 0/1,已连接到 Dropbox

触发器会轮询被监控的文件夹,并在每次有新上传文件时触发。默认轮询频率因套餐而异,通常为 1 到 5 分钟。


步骤 2:Dropbox:列出文件夹中的文件

目前为止的流程: 触发器 + 列出文件夹中的文件。

触发器会在单个新文件创建时触发。合并操作需要文件夹中当前存在的所有 PDF 文件。 列出文件夹中的文件 在运行时获取文件夹内容的最新快照。

  1. 点击 + 新步骤, 搜索 Dropbox, 挑选 列出文件夹中的文件
  2. 配置
    • 文件夹/blog data/merge files dropbox (与触发器路径相同)

列出文件配置

Power Automate Dropbox 列表文件夹中的文件操作,文件夹设置为 /blog data/merge files dropbox,已连接到 Dropbox
  1. 动作返回 body('List_files_in_folder')一个文件元数据对象数组。每个对象携带 IdNameDisplayNamePathLastModified, 和 Size下一步将遍历这个数组。

提示。 如果您的文件夹包含混合内容(PDF、图像和 Office 文档),而您只想合并 PDF,请添加一个 过滤器数组 此步骤之后的操作表达式 endsWith(toLower(item()?['Name']), '.pdf') 并将过滤后的数组输入到循环中。


步骤 3:初始化变量文件

目前为止的流程: 触发器 + 列出文件 + 初始化变量。

合并操作需要一组二进制文件。请分配一个空数组来收集这些文件。

  1. 点击 + 新步骤, 挑选 初始化变量
  2. 配置
    • 姓名Files
    • 类型Array
    • 价值:留空

初始化变量配置

Power Automate 初始化变量操作配置了“名称:文件”和“类型:数组”以及一个空的“值”字段。

步骤 4:应用于每个文件并获取文件内容,然后追加到数组

目前为止的流程: 触发器 + 列出文件 + 初始化变量 + 应用于每个。

这是流程的核心。遍历快照返回的每个文件,获取其字节,转换为二进制,然后推送到 Files

步骤 4a:应用于每个(选择来源)

  1. 点击 + 新步骤, 挑选 适用于每个
  2. 配置
    • 从之前的步骤中选择一个输出。 (表达): body('List_files_in_folder')
Power Automate 将“从先前步骤中选择输出”应用于每个操作,并将表达式主体设置为“List_files_in_folder”,其中“List files in folder”中的“主体”标记会显示出来。

步骤 4b:获取文件内容(在循环内部)

  1. 在循环内点击 添加操作, 挑选 Dropbox:获取文件内容
  2. 配置
    • 文件选择 ID 从“列出文件夹动态内容中的文件”中提取令牌(它会自动解析为当前项的 ID)。
    • 推断内容类型Yes (在高级参数下)
使用 Power Automate 在 Dropbox 中执行“获取文件内容”操作,并将“文件”设置为“列出文件夹中的文件”中的 Id 令牌,高级参数“推断内容类型”设置为“是”,则在右侧打开动态内容面板,显示“列出文件夹中的文件”中的 Id、Name、DisplayName、Path、LastModified 和 Size 令牌。

步骤 4c:追加到数组变量(在循环内)

  1. 下面获取文件内容, 添加操作, 挑选 追加到数组变量
  2. 配置
    • 姓名Files
    • 价值 (表达式,点击) fx): base64ToBinary(body('Get_file_content')?['$content'])
Power Automate 追加到数组变量中,应用到每个循环,命名文件,值设置为表达式 base64ToBinary 主体,左引号 Get_file_content,右引号,右括号,问号,美元内容,右括号显示在表达式编辑器中

这是把所有事情联系起来的关键所在。 Dropbox 将每个文件返回为 { "$content": "<base64 string>", "$content-type": "application/pdf" }合并操作需要一个二进制缓冲区。 base64ToBinary(...)$content 连接两者。跳过转换和合并操作,因为会因“内容无效”而出错。


步骤 5:PDF4me:将多个 PDF 文件合并为一个 PDF 文件

目前为止的流程: 触发器 + 列出文件 + 初始化变量 + 应用于每个 + 合并多个 PDF。

整个数组输入后,会输出一个PDF文件。

  1. 在“应用到每个循环”下方单击 + 新步骤, 搜索 PDF4me, 挑选 将多个 PDF 文件合并成一个 PDF 文件
  2. 连接 PDF4me 连接时请使用您的 API 密钥(仅限首次连接)。
  3. 配置
    • 正文/文档内容选择 Files 变量标记
    • 输出文件名Output.pdf

合并操作配置

Power Automate PDF4me 将多个 PDF 文件合并为一个 PDF 文件的操作,将 Body/docContent 设置为 Files 变量,输出文件名设置为 Output.pdf。此时会打开动态内容面板,显示“变量 Files”、“应用于每个”、“当前项”、“列出文件夹中的文件”和“正文”等信息。
  1. 这些PDF文件被连接起来。 数组顺序这是 Dropbox 返回文件的顺序(通常按名称字母顺序排列)。如果您需要不同的顺序,请进行排序。 body('List_files_in_folder') 与一个 选择 循环之前的操作,例如通过 LastModified 按最新发布顺序排列。

提示。 内部 输出.pdf 这里的名称只是 PDF 元数据标题,并非 Dropbox 文件名。真正的 Dropbox 文件名在步骤 6 中设置。请将其保留为稳定的占位符,以便您可以在 Power Automate 运行历史记录中按此名称搜索流程运行。


步骤 6:Dropbox:创建具有动态文件名的文件

目前为止的流程: 触发器 + 列出文件 + 初始化变量 + 应用于每个 + 合并多个 PDF + 创建文件。

将合并后的 PDF 文件写回 Dropbox,文件名由运行时计算得出,其中包含文件计数。

  1. 点击 + 新步骤, 挑选 Dropbox:创建文件
  2. 配置
    • 文件夹路径/blog data/merge blog template/output
    • 文件名 (表达式,点击) fx): concat('merge-', string(length(body('List_files_in_folder'))), '.pdf')
    • 文件内容选择 文件内容 来自“合并多个 PDF”操作的令牌

文件名表达式

Power Automate Dropbox 创建文件操作 文件夹路径 /blog data/merge blog template/output,文件名表达式 concat 左括号 merge 破折号 逗号 字符串 左括号 长度 左括号 正文 左引号 List_files_in_folder 右引号 右括号 右括号 逗号 点 pdf 右括号,合并操作中的文件内容

最终行动准备就绪

Power Automate Dropbox 创建文件操作,使用文件夹路径 /blog data/merge blog template/output,文件名标记连接表达式,文件内容标记来自“将多个 PDF 文件合并为一个 PDF 文件”操作,动态内容面板显示文件内容、标题/文件名、标题/页数标记。

同样的表达式也揭示了 页眉/页数 合并输出时,如果您想要记录合并后的 PDF 文件包含多少页,这将非常有用。

提示。 如果您希望在运行记录中添加日期而不是文件计数,请将表达式替换为 concat('merge-', utcNow('yyyy-MM-dd-HHmmss'), '.pdf')文件以以下形式返回: merge-2026-06-12-094501.pdf 重播节目永远不会冲突。


运行流程并验证

  1. 节省 右上角的流水。
  2. 将一个(或四个)文件拖放到 /blog data/merge files dropbox任何方法都可以,轮询间隔会在几分钟内触发。
  3. 打开 运行历史记录 点击右上角,观察操作图标变为绿色。对每个文件应用操作后,应显示正确的迭代次数,如果文件夹中有四个文件,则显示“1/4”。
  4. 打开 Dropbox /blog data/merge blog template/output/一个名为 merge-4.pdf 正在等待。打开它,输入文件夹中的所有 PDF 文件都已合并成一个文档。

你实际建造了什么? 这是一个零接触整合流程,能够响应每次新上传的文件,在运行时读取整个文件夹状态,并将所有当前文件写入一个唯一命名的 PDF 文件。无需硬编码列表、无需定时批处理作业、无需手动点击。同样的模式可以处理 4 个 PDF 文件,也可以处理 400 个 PDF 文件,无需任何更改。同样的方案也适用于 Make(通过迭代器遍历 Dropbox 文件列表)和 Zapier(通过 Zapier 循环遍历查找文件的结果)。


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

仅筛选 PDF
插入一个 过滤器数组 步骤 2 和步骤 3 之间的操作 endsWith(toLower(item()?['Name']), '.pdf')循环会忽略 .docx、.png 以及文件夹中的任何其他文件。
按最新排序
添加一个 选择 该操作映射列表并进行排序 sort(body('List_files_in_folder'), 'LastModified')反向 撤销(...) 如果您希望最新内容显示在合并后的 PDF 文件的顶部。
合并后转换为 PDF/A 格式
Insert PDF4me 创建 PDF/A 在步骤 5 和步骤 6 之间进行合规性检查 PDF/A-2b. 传输到 Dropbox 的输出现在符合 ISO 19005 归档标准。
存档源文件
在步骤 6 之后添加另一个 适用于每个 遍历文件列表并调用 Dropbox 移动文件 将每个输入推送到 /已处理下次运行只会接收新上传的内容。

故障排除

合并操作错误与“无效内容”

添加到数组 价值 表达式未包装 base64ToBinary(...)如果不进行转换,数组中存储的是 base64 字符串而不是二进制缓冲区,PDF4me 会拒绝这些字符串。重新打开“追加到数组”对话框,切换到表达式编辑器,然后粘贴。 base64ToBinary(body('Get_file_content')?['$content']) 逐字。

对每个运行应用零次

触发器已触发,但“列出文件”返回的是一个空数组。请检查触发器和“列出文件”数组。 文件夹 两个值完全相同。路径不匹配(一个路径末尾有斜杠,另一个没有)是常见原因。

文件名显示为 合并.pdf

长度() 调用在设计时未解析。请确保已将表达式粘贴到…… 文件名 通过该字段 特效 表达式编辑器,而不是纯文本编辑器。纯文本编辑器会将花括号保留为字面字符,导致函数永远不会执行。

输出结果会覆盖之前的运行结果。

两次连续运行,文件数量相同,产生的文件名也相同(merge-4.pdf)。或者将表达式替换为时间戳(concat('merge-', utcNow('yyyy-MM-dd-HHmmss'), '.pdf')或者附加一个 GUID guid()


后续步骤

同样的六步模式(监视、列出、循环转换为数组、合并、保存并指定运行时名称)可以处理任何“响应文件夹”的自动化操作。明天放入一个新文件,程序会自动识别。无需编辑,也无需重新部署。