PDFファイルを分割してファイル作成を行う

PowerAutomateDesktopでPDFファイルのページを抜き出して、それぞれのページのみのファイルを作成するフロー

LOOP LoopIndex FROM 1 TO 100 STEP 1
    Pdf.ExtractPages PDFFile: $'''対象ファイルパス''' PageSelection: LoopIndex ExtractedPDFPath: $'''出力先ファイルパス''' IfFileExists: Pdf.IfFileExists.AddSequentialSuffix
    ON ERROR

    END
END

1ページごとに分割する

LOOP LoopIndex FROM 1 TO 100 STEP 2
    Pdf.ExtractPages PDFFile: $'''対象ファイルパス''' PageSelection: $'''%LoopIndex%-%LoopIndex + 1%''' ExtractedPDFPath: $'''出力先ファイルパス''' IfFileExists: Pdf.IfFileExists.AddSequentialSuffix
    ON ERROR

    END
END

2ページずつ分割する

PDFファイルで取得したデータが、ファイル数の軽減のために一つにまとめられてしまっていたりしてページごとに分割して保管をしたい場合に使用します
こんなPDF加工処理はVBAを使うと、オブジェクトの作成が必要となったり
なにかとややこしいですが、Automateを使うとたった一つのアクションで可能です
さらにループ処理を利用することで、ファイル内の全ページに対して処理を行うことも簡単に行えます

フロー解説

1つ目のフロー

1つ目のフローをコピペした際のフロー
1つ目のフロー

1つ目のフローをコピペすると、このような3行のアクションが作成されます

1・3行目はループ処理です
設定は全て1行目で行います

ループ処理の設定画面の画像
ループ処理の設定画面

ループ処理ではページの更新を行っています
「開始値」はPDFファイルの分割を開始ページとなります
「終了」についてはPDFファイルの最終ページ数と一致するのが望ましいのですが、簡単に取得も出来ませんし、実際処理上はそれほど重要ではありません
なので発生しないページ数を指定すれば問題ありません
ここでは100を指定していますが、100ページを超えるファイルの分割処理を行いたい場合は任意に増やすと良いです
「増分」についてはページの更新になるので、1つ目の場合は1ページごとの分割になるので1が指定されています
またループで数値は利用するので、変数は生成します

新しいPDFファイルへのPDFファイルページの抽出アクションの設定画面の画像
PDF分割アクションの設定画面

2行目のアクションではPDFファイルの分割と新規ファイルの生成を行います
「PDFファイル」「抽出されたPDFファイルのパス」にはそれぞれ元ファイルと出力先のパスを拡張子まで含めて行います
ここの設定に関しては「ファイルが存在する場合」で連番ファイルの生成を指定しているので元ファイルが上書きされることが無いため同じパスにしていても問題はありません、むしろ同じ場所に生成されるので分かりやすいかもしれません
「ページ選択」はループの変数を指定することで、対象ページを更新していきます
ちなみにこのアクションでファイルの保存まで完了するので、後続処理が無いので変数は生成していません

ここで重要なのが、ループ処理の説明でおこなった終了ページと終了数値が一致していない点についてです
このままだとループの数値がPDFファイルに存在していないページ数を指定するためエラーが発生してしまいます
そこでこのアクションにエラー処理を設定します

エラー処理を設定した場合のフロー上の表示についての画像
アクションの表示

2行目のアクションの左側に青色のマークがついていることに気づいていましたでしょうか
これはエラー処理が設定されている場合に表示されるものです
どんな設定がされているかは、アクションの設定画面から確認できます

エラー処理を設定するにはアクションの設定画面下部にある「エラー発生時」を選択する
エラー処理を設定する箇所

エラー処理を設定・確認するには、設定画面の下にある「エラー発生時」をクリックします

エラー処理の設定画面の画像
エラー処理の設定画面

すべてのアクションに対して、この設定は行えます
設定項目は豊富にあるので特にWebブラウザ操作などの不安定処理の際の再試行などが行えるため知っておくと良いです
今回の場合は、エラーが発生した状況が「存在しないページを指定した」というものであるため特に特別な処理は不要です
なので「フローの実行を続行する」と「次のアクションに移動」を選択しています

今回のフローは最低限のアクションで目的を達成するものなので行っていませんが
ループ処理に途中判定で終了条件が当てはまればループをすべて実行せずに抜けるような処理を作ることが可能です
上記の「次のアクションに移動」という選択肢のほかに「ラベルに移動」という設定もあります
これを活用することで、エラー発生時はループの外に作成したラベルに移動できます
そうすることで無駄なループ処理を行わないので処理の速度が向上できます
ページ数が膨大でかつ、そのうちのほんの一部しか処理を行わないのが前提であればそのような設定を行うことも有効かもしれません
総ページ数と処理回数は比例すると思うので、あんまりそういった場面は無いかもしれません

2つ目のフロー

2つ目のフローをコピペしたときに作成されるフローの画像
2つ目のフロー

2つ目のフローは複数ページごとに分割を行いたい場合に使用するものです
ここでは2ページごとに分割を行っています
数値を修正することで3ページごとや10ページごとなどの任意の分割を行うことが出来ます
また設定自体はページに関するところ以外は1つ目のフローと同じですので、そのあたりは割愛します

ループアクションの設定画面の画像
ループアクションの設定画面

「増分」を編集します
2ページごとに処理を行う場合は、その加算分を指定するだけです
なので3ページごとなら3、といった具合です

新しいPDFファイルへのPDFファイルページの抽出アクションの設定画面の画像
分割アクションの設定画面

次に分割アクションの設定項目の「ページ選択」を編集します
ここを編集していないと1ページしか抽出されません
入力例にもありますが、連続ページを指定する場合は開始と終了の数値の間に「-」(半角ハイフン)を入力して指定します
今回の場合は変数となるので変数で指定を行います

変数の計算についてですが、画像のとおり「%LoopIndex + 1%」とします
%で囲んだものは変数と認識されます
そのため「%LoopIndex%+1」とした場合はエラーとなります
はじめはこの%内に入れ込むことが分からなくて、わざわざ変数に加算するアクションを利用したりしていました
なので、ここの+1の数値を3ページごとなら+2にする、といった具合で編集を行います

以上の様に任意ページも2か所編集するだけで可能になります
VBAでも出来ますが、こっちのほうが楽なのが分かりますな