跳到主要内容

在 Power Automate 中按文本拆分 PDF:使用 PDF4me 将一批扫描件拆分为多个文件

· 阅读需 24 分钟
SEO and Content Writer

PDF4me 按文本拆分 PDF 这是一个 Power Automate 操作,它会将一个 PDF 文件分割成多个文件,分割位置取决于文本标记的出现。此流程会监视 SharePoint 文件夹,并在每次扫描时根据标记进行分割。 Serial#: 标记后,将结果循环导入 Dropbox。一次批量扫描会生成三个命名文件,无需手动选择页面。

任何使用扫描仪的人都知道这个问题。有人把一叠文件放进进纸器,按一下扫描键,结果得到的是一个包含二十条毫不相干记录的PDF文件。谷歌首页上的所有在线文件分割工具都能轻松解决这个问题,前提是需要人工上传文件,点击页面选择器,然后下载分割后的文件。偶尔一次没问题。但如果扫描仪每天早上都要运行,那就麻烦了。这种流程完全不需要人工干预。

流程概览
1. When a file is created in a folder
SharePoint trigger watching /Shared Documents/ScanSplitInput.
2. PDF - Split PDF by Text
PDF4me cuts the scan before every page carrying the Serial#: marker.
3. For each
Loops over body/splitedDocuments, once per split file.
4. Create file
Dropbox writes each piece into /ScanSplitOutput under its own name.
简短版

扫描文件保存到 SharePoint 库中。PDF4me 读取文本层,找到每个新记录的起始页,并返回一个包含多个 PDF 文件的数组。一个 For Each 循环遍历该数组,并将每个文件上传到 Dropbox。整个过程只需四个操作,无需编写任何表达式,耗时不到六秒。

基于原因的问答

为什么按文本量而不是页数拆分? 页数统计仅在每条记录长度相同时才有效。但实际批次的数据长度并不统一。一张发票占一页,下一张可能占四页。记录中会包含一个文本标记,因此无论长度如何变化,分页结果都能保持正确。

为什么PDF需要文本层? 该操作搜索的是文档中的文本,而不是像素。如果是未经 OCR 处理的照片或平板扫描件,则没有文本可供查找,因此每次匹配都返回空结果。先运行 OCR,同样的流程也适用于纸质原件。

为什么要在分割后使用 For each 循环? 该操作返回的是一个数组,而不是单个文件。Power Automate 无法一次性将数组写入存储,因此循环会将“三个文档”转换为三个单独的“创建文件”调用。

为什么要将输出发送到 Dropbox 而不是发送回 SharePoint? 主要是习惯使然,而且这样在测试时可以清晰地将输入和输出文件夹分开。只需将最后一个操作替换为 SharePoint 创建文件,流程中的其他任何内容都无需更改。


您将获得

输入: 一个包含多条记录的 PDF 文件被放入 SharePoint 文档库中,其中每条记录都以一行文字开头。 Serial#: SPTEST-ASerial#: SPTEST-B, 等等。 输出: Dropbox 文件夹中每个记录对应一个 PDF 文件,每个 PDF 文件包含与该记录完全对应的页面。

SharePoint 文档库显示了 ScanSplitInput 文件夹,其中包含 scan-split-test.pdf 和 sharepoint-trigger-test.pdf,这两个文件均由 Pdf4me Flow 帐户修改。

受监控的 SharePoint 文件夹。任何落入此文件夹的内容都会启动跟踪。

Dropbox ScanSplitOutput 文件夹列出了拆分生成的 sharepoint-trigger-test 1.pdf、sharepoint-trigger-test 2.pdf 和 sharepoint-trigger-test 3.pdf 文件。

输入一份三页的扫描件,输出三个分别编号的PDF文件。


你需要什么

  • 动力自动化打开 Power Automate标准的 Microsoft 365 许可证涵盖了这里使用的所有内容。这是一个云端流程,而非 Power Automate Desktop。
  • PDF4me API密钥获取您的 API 密钥首次添加 PDF4me 操作时进行连接。
  • 一个 SharePoint 网站和一个 Dropbox 帐户在构建流程之前,请在 SharePoint 文档库中创建一个输入文件夹,并在 Dropbox 中创建一个输出文件夹,以便两个选择器都有指向的位置。
  • 带有重复文本标记的测试 PDFscan-batch-sample.pdf三页,每页首页都有一行序列号。

先拿到样品。 保存流程后,请下载输入 PDF 文件并将其上传到 SharePoint 输入文件夹。这里也提供了三个预期输出文件,您可以将其与自己运行生成的文件进行比较。


流程概览

  1. 当在文件夹中创建文件时 (SharePoint 触发器)指向 /Shared Documents/ScanSplitInput
  2. PDF - 按文本拆分 PDF (PDF4me)带有搜索文本 Serial#:(.*) 和分割类型 before
  3. 对于每个 迭代 body/splitedDocuments
  4. 创建文件 (Dropbox)写入 /ScanSplitOutput

完整流程概述

Power Automate 运行历史记录显示以下四个操作按顺序成功完成:SharePoint“在文件夹中创建文件”耗时 0.3 秒;PDF“按文本拆分 PDF”耗时 0.4 秒;“For Each”循环耗时 4 秒,显示为 3 次迭代中的第 1 次;Dropbox“创建文件”耗时 1 秒。

整个流程包含四个步骤。每个计数器显示“1/3”时,分割操作都在执行其功能。


步骤 1:如何监视 SharePoint 文件夹中的新扫描?

目前为止的流程: 目前还没有什么,这是触发点。

当某个特定文档库文件夹中出现文件时,就会触发此触发器。请精确选择文件夹。如果将其指向共享库的根目录,则每次上传不相关的文件都会触发一次运行。

  1. 创建一个新的 自动化云流 并搜索触发器列表 当在文件夹中创建文件时
  2. 配置
    • 网站地址例如,您的网站。 PDF4me Sharepoints - https://ynoox1.sharepoint.com/sites/PDF4meSharepoints
    • 文件夹 ID/Shared Documents/ScanSplitInput
  3. 打开 高级参数 并打开 推断内容类型然后将其设置为 Yes

SharePoint 触发器配置

Power Automate:当在文件夹触发面板中创建文件时,如果站点地址设置为 PDF4me SharePoint,文件夹 ID 设置为 /Shared Documents/ScanSplitInput,并且高级参数“推断内容类型”设置为“是”,则触发该面板。

将“推断内容类型”设置为“是”后,触发器将返回真正的 PDF 字节,而不是通用数据块。

提示。 此触发器在选择器中带有“(已弃用)”标签。它仍然可以运行,并且就是这里显示的那个,但对于新的生产流程,请优先选择其他触发器。 创建文件时(仅限属性) 其次是 获取文件内容其余流程完全相同,因为两条路径最终都会获取到文件字节。微软在以下位置列出了每个触发器及其状态: SharePoint 连接器参考


步骤 2:按文本分割 PDF 如何决定从哪里进行分割?

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

这是真正执行操作的步骤。它读取文档的文本层,找到包含搜索文本的每一页,并在这些页面处截断文档。其他一切都是基础工作。

  1. 添加新步骤并搜索 PDF - 按文本拆分 PDF
  2. 配置
    • 文件内容File Content 从触发器
    • 文件名x-ms-file-name-encoded 从触发器
    • 文本Serial#:(.*)
    • 分体式before
    • 拆分文件命名NameAsPerOrder
  3. 当系统提示连接时,请连接您的 PDF4me 帐户。

按文本参数拆分 PDF

范围此处使用的值它控制着什么
文件内容File Content 触发器要分割的 PDF 文件字节。必须是带有可搜索文本层的真实 PDF 文件。
文件名x-ms-file-name-encoded用于处理识别的源名称,以及作为输出名称的词干。
文本Serial#:(.*)开始新记录的标记。匹配区分大小写,所以 serial#: 什么也找不到。
分体式before在每个匹配页之前立即剪切,因此标记页会打开自己的文档。使用 after 改为关闭之前的窗口。
拆分文件命名NameAsPerOrder按切割顺序对产出物进行编号,产生 name 1.pdfname 2.pdfname 3.pdf
PDF4me PDF 按文本拆分 PDF 操作面板显示文件内容已从 SharePoint 触发器映射,文件名已映射到 x-ms-file-name-encoded,文本设置为序列号搜索模式,拆分类型设置为“之前”,拆分文件命名设置为“按顺序命名”。

分隔符的作用是区分标记是打开其记录还是关闭其上方的记录。如果顺序颠倒,每个文件都会错开一页。

提示。 选择一个在文档中其他任何位置都不能出现的标记。 Serial#: 安全。一个简单的词 Invoice 不,因为它还会匹配页面中间的“发票总额”短语,并在那里进行拆分。


步骤 3:为什么这里需要 For each 循环?

目前为止的流程: SharePoint触发器+按文本拆分PDF。

分割操作返回一个名为 splitedDocuments每个条目都包含一个输出文件。Power Automate 无法在单个操作中将整个数组写入存储,因此必须一次遍历数组中的一个条目。

  1. 添加一个 控制 行动并选择 对于每个
  2. 配置
    • 从之前的步骤中选择一个输出。body/splitedDocuments 从“按文本拆分 PDF”操作
  3. 循环的并发数保持默认值。这些文件很小,而且按顺序运行更便于阅读。微软在文档中详细说明了并发数和嵌套限制。 适用于每份参考文献

对于每种配置

Power Automate 中,对于每个操作面板,如果“从先前步骤中选择输出”字段填充了来自 PDF4me 按文本拆分 PDF 操作的 body/splitedDocuments 令牌,则该字段应填充为“从先前步骤中选择输出”字段。

一个令牌就是整个配置。如果 Power Automate 已自动将您的“创建文件”操作封装在一个循环中,则它已经为您完成了此操作。

这一行代码决定了整个流程是否有效。 如果你将循环指向除以下任何内容之外的任何东西 正文/拆分文档其中的“创建文件”操作要么会运行一次,但有效负载错误,要么根本不会运行。


步骤 4:如何将每个拆分文件保存到 Dropbox?

目前为止的流程: SharePoint 触发器 + 按文本拆分 PDF + 对于每个。

在循环内部,每次迭代都会通过两个标记公开当前拆分的文件: fileNamestreamFile将它们直线横跨。

  1. 内部 对于每个 块,添加一个 Dropbox 行动并选择 创建文件
  2. 配置
    • 文件夹路径/ScanSplitOutput
    • 文件名fileName
    • 文件内容streamFile
  3. 出现提示时,请连接您的 Dropbox 帐户。

Dropbox 创建文件配置

在“For each”循环中创建 Dropbox 文件操作面板,并将文件夹路径设置为 /ScanSplitOutput,文件名映射到 fileName 标记,文件内容映射到 PDF4me 拆分操作中的 streamFile 标记。

fileName 和 streamFile 来自当前循环项,而非触发器。这两个标记都带有 PDF4me 图标。

提示。 输出文件夹应与输入文件夹分开。将拆分后的文件写回触发器正在监视的文件夹会形成一个循环,该循环会因其自身的输出而重新触发,这是一种代价高昂的问题排查方式。


运行流程并验证

  1. 节省 右上角的流水。
  2. 上传 scan-batch-sample.pdf 触发器正在监视 SharePoint 文件夹中的内容。由于触发器会轮询,因此请耐心等待一分钟,不要期望立即运行。
  3. 打开流程 运行历史记录 并确认所有四个操作都带有绿色对勾。每个操作块都会显示一个计数器,其内容应为: 1/3 示例文件。
  4. 打开 /ScanSplitOutput 在 Dropbox 中。您应该看到三个 PDF 文件,编号分别为 1、2 和 3,每个文件都包含一条序列号记录。

你实际建造了什么? 内容感知文档分隔符。这四个操作适用于任何批次,其中每条记录都使用一致的字符串来声明自身,无论是发票号、患者 ID、病例参考号还是章节标题。PDF4me 中也存在相同的操作。 制作Zapiern8n因此,这种模式可以在不同的平台上移动,只有触发步骤和存储步骤会发生变化。


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

首先对扫描件进行OCR识别
纸质原件没有文本层。在触发点和分割点之间插入一个 PDF4me OCR 操作,这样仅包含图像的扫描件就能开始匹配相同的标记。
按条形码分割
如果您的扫描仪会插入分隔页,请更改操作。 按条形码分割 PDF同样的循环,同样的创建文件操作,不同的检测方法。
按内容路由
在循环中添加一个条件,读取当前文件名,并根据文件名前缀将文件写入不同的文件夹。这样,一次扫描即可将文件分发到多个目标位置。
PDF4me 与其他替代方案的比较
请参阅下面的比较表,了解此方法与手动在线拆分器和 Power Automate Desktop 有何不同。
云流与其他方案的比较无人值守运行内容上的分歧需要一台台式电脑
Power Automate 云流中的 PDF4me是的是的,在任何文本标记上
手动在线分线器不,每个文件都是人工上传的。有时,通过页面选择器
Power Automate 桌面版只有在机器开启时取决于已安装的操作是的

常见问题

如何在 Power Automate 中拆分 PDF?

添加 PDF - 按文本拆分 PDF 从 PDF4me 到云流的操作,将 PDF 字节映射到 文件内容并赋予它一个 文本 要查找的值。该操作返回一个包含多个独立 PDF 文件的数组。 body/splitedDocuments封装存储操作,例如 Dropbox 创建文件对于每个 遍历该数组,并将每个元素保存下来。

这里不需要任何表达式写作。这篇文章中展示的四个步骤就是完整的流程。

Power Automate 能否根据内容拆分 PDF 文件?

是的,这正是该流程的功能。Power Automate 本身没有 PDF 分割功能,因此内容感知由 PDF4me 连接器实现。它会读取文档的文本层,并在搜索字符串出现的位置进行分割,这意味着分割是按照记录数而不是固定的页数进行的。

唯一的要求是必须包含真正的文本层。未经OCR处理的扫描件,在搜索看来只是文字的图片而已。

如何在 Power Automate 中将 PDF 文件拆分成多个文件?

分割本身是一个操作,但从中取出多个文件需要两个操作。 按文本拆分 PDF 生成数组,以及一个 对于每个 循环会将该数组转换为每个文档一次的 Create 文件调用。跳过循环是导致最终只有一个输出文件而不是多个输出文件的最常见原因。

在此示例运行中,三条记录的扫描会生成三个名为“ sharepoint-trigger-test 1.pdf 通过 sharepoint-trigger-test 3.pdf, 因为 拆分文件命名 设置为 NameAsPerOrder

Power Automate Desktop 是否支持拆分 PDF?

此流程是云端流程,这是有意为之。它会在文件上传到 SharePoint 时,利用微软的基础架构运行,无需维护任何服务器,也无需管理网关。Power Automate Desktop 可以调用相同的 PDF4me API,但需要占用一台定时运行的服务器,并需保证其正常运行时间。

如果您的文档已经存储在 SharePoint、OneDrive 或 Dropbox 中,那么云端流程的构建就更简单。

能否按书签而不是文本分割PDF文件?

采取这种行动行不通。 按文本拆分 PDF 仅匹配文本层。如果您的源文档包含可靠的书签,则最接近的 PDF4me 等效项是 拆分 PDF 按页码,或 按条形码分割 PDF 当使用分隔片时。

实际上,在扫描材料上,文本标记比书签更可靠,因为扫描仪不会创建书签,但会保留页面上打印的内容。


故障排除

流程运行正常,但 Dropbox 中只出现一个文件。

创建文件操作位于 For Each 循环之外,或者循环指向错误的标记。打开循环并确认其内容正确。 正文/拆分文档并检查 Create 文件是否位于循环边界内,而不是位于循环边界下。

分割操作返回原始文件,文件内容保持不变。

没有页面与搜索文本匹配,因此没有内容可以剪切。请先检查大小写,因为匹配区分大小写。然后打开 PDF 文件,尝试用光标选择标记文本。如果无法选中,则说明文档没有文本图层,需要先进行 OCR 识别才能执行此操作。

每个输出文件都差一页。

拆分类型设置的值错误。 带有标记的页面会开始一个新的文档。 它会结束上一个进程。切换设置并重新运行。

该流程不断自我触发。

输出文件夹与触发器监视的文件夹相同,因此每个拆分的文件都会触发另一次运行。将“创建文件”指向单独的文件夹,在本例中为 Dropbox。 /ScanSplitOutput 路径,循环停止。


后续步骤

同样的四步模式(监视文件夹、按标记分割、循环数组、保存每个部分)可以处理任何需要变成多个的批量文档。