Power AutomateでPDFをテキストで分割する:PDF4meを使用してスキャンしたバッチを個別のファイルに変換する

PDF4me PDFをテキストで分割 これは、テキストマーカーが表示されるたびに 1 つの PDF を複数のファイルに分割する Power Automate アクションです。このフローは SharePoint フォルダーを監視し、新しいスキャンごとに分割します。 Serial#: マーカーを付けた後、結果をDropboxにループ保存します。1回のバッチスキャンで3つの名前付きファイルが作成され、手動でページを選択する必要はありません。
スキャナーを操作したことがある人なら誰でもこの問題を知っているでしょう。書類の束を給紙口に置き、スキャンボタンを一度押すと、関連性のない20件のレコードが入った1つのPDFファイルが生成されます。Googleの検索結果の1ページ目に表示されるオンライン分割ツールはどれも、人間がファイルをアップロードし、ページ選択画面をクリックして分割ファイルをダウンロードすれば、この問題を解決してくれます。一度だけなら問題ありませんが、スキャナーが毎朝稼働する場合はそうはいきません。このフローでは、人間が関与するプロセスを完全に排除します。
スキャンされたファイルはSharePointライブラリに保存されます。PDF4meはテキストレイヤーを読み込み、新しいレコードを開始するすべてのページを検出し、個別のPDFファイルの配列を返します。For Eachループがその配列を走査し、各ファイルをDropboxにドロップします。たった4つのアクションで、式を記述する必要はなく、全体の処理は6秒以内に完了します。
なぜ?という問いに対する質疑応答
ページ数ではなく、テキスト数で分割する理由は? ページカウントは、すべてのレコードの長さが同じ場合にのみ機能します。実際のバッチは均一ではありません。ある請求書は1ページ、次の請求書は4ページになることもあります。テキストマーカーはレコードとともに移動するため、長さがどのように変化しても分割は正しく行われます。
PDFにテキストレイヤーが必要なのはなぜですか? この処理は、文書内のピクセルではなく、テキストを検索します。OCRが適用されていない写真撮影またはフラットベッドスキャンでは、検索対象のテキストが存在しないため、一致する結果はすべて空になります。最初にOCRを実行すれば、紙の原稿でも同じ処理が機能します。
分割後にFor Eachループを使うのはなぜですか? このアクションは単一のファイルではなく、配列を返します。Power Automate は配列を一度にストレージに書き込むことができないため、ループによって「3 つのドキュメント」が 3 つの個別のファイル作成呼び出しに変換されます。
なぜ出力結果をSharePointではなくDropboxに送信するのですか? 主に習慣によるものですが、テスト中に入力フォルダーと出力フォルダーが視覚的に分離されるという利点もあります。最後のアクションをSharePointの「ファイルの作成」に置き換えても、フローの他の部分は何も変わりません。
得られるもの
入力: SharePoint ドキュメント ライブラリにドロップされた 1 つのマルチ レコード PDF では、各レコードは「次の行で始まる」という行で始まります。 Serial#: SPTEST-A、 Serial#: SPTEST-B、 等々。 出力: Dropboxフォルダ内にレコードごとに1つのPDFファイルが格納され、各PDFファイルにはそのレコードに属するページが正確に格納されている。

監視対象のSharePointフォルダ。ここにファイルやファイルが格納されると、処理が開始されます。

3ページ分のスキャンデータを入力として受け取り、それぞれ番号の付いた3つのPDFファイルを出力します。
必要なもの
- パワーオートマタ。 Power Automateを開く標準のMicrosoft 365ライセンスで、ここで使用されているすべての機能がカバーされます。これはクラウドフローであり、Power Automate Desktopではありません。
- PDF4me APIキー。 APIキーを取得してくださいPDF4meアクションを初めて追加する際に接続してください。
- SharePointサイトとDropboxアカウントフローを作成する前に、SharePoint ドキュメント ライブラリに入力フォルダーを、Dropbox に出力フォルダーを作成してください。そうすることで、両方のピッカーが参照できる場所が確保されます。
- テキストマーカーが繰り返し表示されるテスト用PDF。 scan-batch-sample.pdf3ページ構成で、各ページ冒頭にシリアル番号の行があります。
まずはサンプルを入手してください。 入力用のPDFファイルをダウンロードし、フローを保存したらSharePointの入力フォルダにアップロードしてください。想定される出力ファイルも3つ用意されているので、ご自身の実行結果と比較することができます。
フローの概要
- フォルダ内にファイルが作成されると (SharePoint トリガー) が指している
/Shared Documents/ScanSplitInput。 - PDF - PDFをテキストで分割 検索テキスト付きのPDF4me
Serial#:(.*)分割型before。 - 各 反復する
body/splitedDocuments。 - ファイルを作成する (Dropbox)書き込み中
/ScanSplitOutput。
フローの概要全体

全体の流れは4つのアクションで構成されています。「1 of 3」と表示されるカウンターは、スプリットが正しく機能していることを示しています。
ステップ1:SharePointフォルダーの新しいスキャンを監視するにはどうすればよいですか?
これまでの流れ: まだ何も起きていない。これが引き金だ。
特定のドキュメントライブラリフォルダにファイルが表示されるたびにトリガーが作動します。フォルダは細かく指定してください。共有ライブラリのルートを指定すると、関連性のないアップロードでもトリガーが作動してしまいます。
- 新しいものを作成する 自動化されたクラウドフロー トリガーリストを検索して フォルダ内にファイルが作成されると。
- 設定する:
- サイトアドレス例えばあなたのサイト
PDF4me Sharepoints - https://ynoox1.sharepoint.com/sites/PDF4meSharepoints - フォルダID:
/Shared Documents/ScanSplitInput
- サイトアドレス例えばあなたのサイト
- 開ける 詳細パラメータ そしてスイッチを入れる コンテンツタイプを推測するそれを設定して
Yes。
SharePoint トリガー構成

「コンテンツタイプを推測する」を「はい」に設定すると、トリガーは汎用的なデータではなく、実際のPDFバイトを返します。
ヒント。 このトリガーはピッカーで「(非推奨)」ラベルが付いています。まだ実行され、ここに表示されているものですが、新しいプロダクションフローでは、 ファイルが作成されたとき(プロパティのみ) に続く ファイルの内容を取得する残りのフローは同じです。どちらのルートも最終的にファイルバイトを取得して終了するためです。Microsoft はすべてのトリガーとそのステータスを一覧表示します。 SharePointコネクタのリファレンス。
ステップ2:Split PDF by Textは、どこでPDFを分割するかをどのように決定するのですか?
これまでの流れ: SharePointトリガー。
これが実際の処理です。文書のテキスト層を読み込み、検索テキストを含むすべてのページを見つけ出し、それらのページで文書を切り取ります。それ以外の処理はすべて、いわば配管のようなものです。
- 新しいステップを追加して検索します PDF - PDFをテキストで分割。
- 設定する:
- ファイルの内容:
File Contentトリガーから - ファイル名:
x-ms-file-name-encodedトリガーから - 文章:
Serial#:(.*) - 分割タイプ:
before - 分割ファイル名:
NameAsPerOrder
- ファイルの内容:
- 接続を求められたら、PDF4meアカウントを接続してください。
テキストパラメータによるPDFの分割
| パラメータ | ここで使用されている値 | それが制御するもの |
|---|---|---|
| ファイルの内容 | File Content トリガーから | 分割するPDFファイルのバイト列。検索可能なテキストレイヤーを含む、実際のPDFファイルである必要があります。 |
| ファイル名 | x-ms-file-name-encoded | ソース名は、処理識別に使用されるとともに、出力名の語幹として使用されます。 |
| 文章 | Serial#:(.*) | 新しいレコードを開始するマーカー。マッチングは大文字と小文字を区別するため、 serial#: 何も見つからないだろう。 |
| 分割タイプ | before | 各マッチングページの直前でカットするため、マーカーページは独自のドキュメントとして開きます。 after 代わりに前のものを閉じる。 |
| 分割ファイル名 | NameAsPerOrder | 出力は切断された順に番号付けされ、 name 1.pdf、 name 2.pdf、 name 3.pdf。 |

分割タイプは、マーカーがレコードを開き、その上のレコードを閉じる際の差を表します。これを逆にすると、すべてのファイルが1ページずれてしまいます。
ヒント。 文書内の他の場所には出現しないマーカーを選択してください。 Serial#: 安全です。 Invoice そうではありません。なぜなら、ページの中ほどにある「請求合計」というフレーズにも一致し、そこでも分割されてしまうからです。
ステップ3:ここでFor Eachループが必要な理由は何ですか?
これまでの流れ: SharePointトリガーとテキストによるPDF分割機能。
分割アクションは配列を返します。 splitedDocuments各エントリには出力ファイルが1つずつ格納されます。Power Automateでは、配列全体を1つのアクションでストレージに書き込む方法がないため、配列はエントリごとに順番に処理する必要があります。
- 追加する コントロール 行動して選択する 各。
- 設定する:
- 前の手順から出力を選択します:
body/splitedDocuments「PDFをテキストで分割」アクションから
- 前の手順から出力を選択します:
- ループの並行処理はデフォルトのままにしておいてください。これらのファイルは小さく、実行が順次実行される方が読みやすくなります。Microsoft は並行処理とネストの制限についてドキュメントに記載しています。 各参照に適用する。
各構成について
![Power Automate の各アクションパネルで、[前のステップからの出力を選択] フィールドに、PDF4me Split PDF by Text アクションの body/splitedDocuments トークンが入力されているもの](/assets/images/blog/split-pdf-by-text-power-automate-sharepoint-dropbox/04-for-each.png)
トークン1つで構成全体が構成されます。Power Automateが「ファイルの作成」アクションを自動的にループで囲んだ場合、この処理は既に行われています。
この一行が、フローが正常に機能するかどうかを決定づける。 ループを他のものに向けると body/splitedDocumentsすると、その中の「ファイルの作成」アクションは、間違ったペイロードで一度実行されるか、まったく実行されないかのどちらかになります。
ステップ4:分割した各ファイルをDropboxに保存するにはどうすればよいですか?
これまでの流れ: SharePoint トリガーと、PDF をテキストで分割する機能、および For Each 機能を組み合わせたもの。
ループ内では、各イテレーションで、2つのトークンを介して現在の分割ファイルを公開します。 fileName そして streamFileそれらをまっすぐ横方向にマッピングする。
- 内部 各 ブロックを追加する Dropbox 行動して選択する ファイルを作成する。
- 設定する:
- フォルダパス:
/ScanSplitOutput - ファイル名:
fileName - ファイルの内容:
streamFile
- フォルダパス:
- 指示が表示されたら、Dropboxアカウントを接続してください。
Dropbox ファイル構成の作成

fileNameとstreamFileは、トリガーではなく、現在のループ項目から取得されます。どちらのトークンにもPDF4meアイコンが付いています。
ヒント。 出力フォルダは入力フォルダとは別の場所にしてください。分割されたファイルをトリガーが監視しているフォルダに書き戻すと、自身の出力で再びトリガーされるループが発生し、問題を発見するのにコストがかかります。
フローを実行して検証する
- 保存 右上の流れ。
- アップロード
scan-batch-sample.pdfトリガーが監視している SharePoint フォルダーにデータが格納されます。トリガーはポーリングを行うため、すぐに実行されるとは限らず、1 分ほどお待ちください。 - 流れを開く 実行履歴 そして、4つのアクションすべてに緑色のチェックマークが付いていることを確認します。各ブロックにはカウンターが表示され、次のように表示されるはずです。 1/3 サンプルファイルの場合。
- 開ける
/ScanSplitOutputDropboxに保存してください。1、2、3と番号が振られた3つのPDFファイルが表示されるはずです。各ファイルには、シリアル番号が1つずつ含まれています。
実際に何を作ったのですか? コンテンツ認識型ドキュメントセパレータ。請求書番号、患者ID、ケース参照、章見出しなど、各レコードが一貫した文字列で自己紹介するバッチであれば、同じ4つのアクションが機能します。同じPDF4meアクションは、 作る、 ザピアー そして n8nそのため、このパターンはトリガーとストレージの手順のみを変更して、プラットフォーム間で移行します。
再構築せずに追加できる一般的なバリエーション
| クラウドフローと代替案の比較 | 無人で稼働する | コンテンツに関する分割 | デスクトップマシンが必要です |
|---|---|---|---|
| Power Automateクラウドフロー内のPDF4me | はい | はい、どのテキストマーカーでも | いいえ |
| 手動オンラインスプリッター | いいえ、各ファイルは人間がアップロードします | ページピッカーによって時々 | いいえ |
| Power Automate Desktop | 機械の電源が入っている間のみ | インストールされているアクションによって異なります | はい |
よくある質問
Power AutomateでPDFを分割する方法は?
追加する PDF - PDFをテキストで分割 PDF4me からクラウド フローへのアクション、PDF バイトをマッピングして ファイルの内容それに 文章 検索する値。このアクションは、個別の PDF の配列を返します。 body/splitedDocumentsDropboxなどのストレージアクションをラップします。 ファイルを作成する で 各 その配列をループ処理して、すべての要素を保存します。
表現的な文章作成は一切必要ありません。この記事で紹介する4つの動作が、全体の流れです。
Power Automateは、コンテンツに基づいてPDFを分割できますか?
はい、まさにこのフローがそれを実現します。Power AutomateにはPDF分割機能が標準搭載されていないため、コンテンツ認識はPDF4meコネクタによって行われます。このコネクタはドキュメントのテキストレイヤーを読み取り、検索文字列が出現する箇所で分割します。つまり、分割は固定ページ数ではなく、レコード数に基づいて行われるということです。
唯一の要件は、実際のテキストレイヤーが存在することです。OCR処理を経ないスキャン画像は、検索においては単なる単語の画像に過ぎません。
Power AutomateでPDFファイルを複数のファイルに分割するにはどうすればよいですか?
分割自体は1つの操作だが、そこから複数のファイルを取り出すには2つの操作が必要だ。 PDFをテキストで分割 配列を生成し、 各 ループ処理によって、配列はドキュメントごとに1回のファイル作成呼び出しに変換されます。ループ処理を省略すると、出力ファイルが複数ではなく1つになってしまう最も一般的な原因となります。
ここでのサンプル実行では、3レコードのスキャンで3つのファイルが生成され、 sharepoint-trigger-test 1.pdf を通して sharepoint-trigger-test 3.pdf、 なぜなら 分割ファイル名 に設定された NameAsPerOrder。
Power Automate DesktopでPDFの分割機能は動作しますか?
このフローはクラウドフローであり、それは意図的なものです。ファイルがSharePointにアップロードされるたびにMicrosoftのインフラストラクチャ上で実行され、電源を常時オンにしておくマシンや管理するゲートウェイは不要です。Power Automate Desktopでも同じPDF4me APIを呼び出すことができますが、スケジュールされたマシンとその稼働時間を管理する必要が生じます。
ドキュメントが既にSharePoint、OneDrive、またはDropboxに保存されている場合は、クラウドフローの方が構築が簡単です。
PDFファイルをテキストではなくブックマークで分割することはできますか?
この行動ではそうはいかない。 PDFをテキストで分割 テキストレイヤーのみで一致します。ソースドキュメントに信頼できるブックマークが含まれている場合、最も近いPDF4meの同等品は次のとおりです。 PDFを分割 ページ番号、または PDFをバーコードで分割 仕切りシートが使用されている場合。
実際には、スキャンした資料においては、テキストマーカーの方がブックマークよりも信頼性が高い。なぜなら、スキャナーはブックマークを作成しないが、ページに印刷された内容はそのまま保存するからである。
トラブルシューティング
ファイル作成アクションが For Each ループの外にあるか、ループが間違ったトークンを指しています。ループを開いて、内容を確認してください。 body/splitedDocumentsまた、Create file がループの境界内に位置するようにし、境界外に位置しないように確認してください。
検索テキストに一致するページが見つからなかったため、切り取る箇所がありませんでした。まず大文字と小文字を確認してください。一致判定では大文字と小文字が区別されます。次に、PDFを開き、カーソルでマーカーテキストを選択してみてください。ハイライト表示されない場合は、ドキュメントにテキストレイヤーがないため、OCR処理を実行してからでないと何も認識できません。
分割タイプが間違った値に設定されています。 前にマーカーのあるページで新しいドキュメントが開始されます。 後すると、前の処理が終了します。設定を反転して再度実行してください。
出力フォルダはトリガーが監視するフォルダと同じなので、分割されたファイルごとに別の実行が開始されます。ファイルの作成先を別のフォルダ(この場合はDropbox)に指定してください。 /ScanSplitOutput 経路が途切れ、サイクルが停止する。
次のステップ
同じ4つのステップ(フォルダを監視する、マーカーで分割する、配列をループする、各部分を保存する)のパターンで、複数のバッチドキュメントを処理することができます。