Power Automate for desktop で簡単にPDFをページ分割する

# 1. はじめに

当記事は、2023/02/16 に開催された、[RPACommunity](https://rpacommunity.connpass.com/)　さんの[「【自動化やIT活用ネタ】ライトニングトーク大会」](https://rpacommunity.connpass.com/event/274050/)にて登壇したときの Demo の説明になります。

RPACommunity ライトニングトーク大会は、立候補制で集まった様々なメンバーが多種多様なITトークや自動化トークを披露するイベントです。ぜひ参加、登壇してみてください。

https://rpacommunity.connpass.com/event/274050/







# 2. この記事で説明すること

Power Automate for desktop を利用すると、**PDFファイルを好みのページ数で分割しファイル化する**ことが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/d0dab7e4-d998-79a9-b56e-3fe2dd781f87.png)

その方法として、``「新しい PDF ファイルへの PDF ファイルページの抽出」``アクションを利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/98aa30cd-f4c4-dc29-e0cd-746f6652aace.png)
ドキュメントは以下です。

https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/actions-reference/pdf#extractpages

1ページずつ分割するケースが主だと思います。
この場合、ループ処理を利用することで、動的（可変）な総ページ数のPDFファイルにも対応可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/9b1de85a-d1ab-291e-80c7-f3d3913817de.png)

処理が最終ページまで到達したらループを終わらせる必要があります。つまり、対象PDFの総ページ数が必要となります。

しかし、**現状、Power Automate for desktop には、PDFの総ページ数を取得する手段は存在しません**。
そこで、
#### 「例外処理」を利用し、PDFファイルの分割を数ステップで実現します。


# 3. Power Automate  for desktop の例外処理について

Microsoft のドキュメントは存在しないようです。
training ページは存在します。
https://learn.microsoft.com/ja-jp/training/modules/pad-exception-handling/

また、RPACommunity さんで登壇した時のスライドに、例外処理の仕様を纏めました。

https://speakerdeck.com/miyakemito/power-automate-for-desktopnoli-wai-chu-li-nituite

# 4. 実装方法

全体の構成です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/b43a554d-fc83-d7c2-e860-6b1925ddd4db.png)

## 4-1. Loop
```
開始値：1
終了：[想定されないページ数]（ありえないサイズで指定）
増分：[分割するページ数]
```
で設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/bef8bb0b-2287-fa24-31a4-c40935369050.png)

生成された ``%LoopIndex%`` は、この後のPDF分割で利用します。



## 4-2. 新しい PDF ファイルへの PDF ファイルページの抽出

アクションメニューの[PDF]下にある「新しい PDF ファイルへの PDF ファイルページの抽出」アクションを利用し、PDFを分割します。
```
PDFファイル： 対処のPDFファイルのフルパス

ページ選択： 上記 4-1. で生成された変数 %LoopIndex%

抽出されたPDFファイルのパス： 分割され出力されるPDFファイルのフルパス

ファイルが存在する場合： 「連番のサフィックスを追加します」 を選択すると、ファイル名に連番が付与されます
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/0f7344d7-ace1-0c3a-30bd-1a7e6c1b84ce.png)




## 4-3.　ラベル

上記Loopの外にラベルを配置します。
ラベル名は任意です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/65cebfc3-058d-7f04-a32c-d9848f90a5d8.png)



## 4-4.　例外処理の実装
4-2. のアクションウィンドウ左下の「エラー発生時」ボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/f722e81c-07af-c94f-a6ad-3fef36d0df41.png)

[詳細] - [ページが範囲外です] - [フロー実行を続行する] - [例外処理モード] で、``「ラベルに移動」`` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/e1a5138c-b374-41b9-24ef-ed46a3b29526.png)

[ラベルの選択] に、4-3.で設定したラベルを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/561acfd4-77cf-ee19-5236-d31480844de5.png)

:::note info
Power Automate for desktop の各アクションには、例外処理のケースとして、あらかじめ発生する可能性のある例外が列挙されています。
今回利用した、「ページが範囲外です」は、「1つまたは複数のページが PDF ファイルの範囲外であることを示します」。
https://learn.microsoft.com/ja-jp/power-automate/desktop-flows/actions-reference/pdf#extractpages_onerror
:::



## 4-5.　フロー実行

フローを実行し、PDFファイルが無事分割されることを確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/fa92f6af-e75e-5790-ed79-bd4bcab32ed6.png)
↓
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/480768/1acb987a-5b4a-12a4-725e-15b41002ec02.png)
分割できました！

# まとめ

PDFファイルを固定のページ数で分割するフローが、わずか ４ステップで完結しました。
例外処理を活用することで処理がスマートに構成可能です。

Power Automate for desktop の例外処理は非常に強力な処理です。
例外という言葉から、エラーハンドリング的なイメージを想像しがちですが、今回のような正常系処理にも組み込むことが可能です。
是非ご活用ください。