2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Power Automate DesktopでPDFのページ数を取得して特定のページ以降を別ファイルに出力(ループなし・Edge不使用)

Posted at

1.やりたいこと

  • 総ページ数が可変のPDFファイルから、特定のページ以降を別ファイルとして出力したい
    (例:PDFから2ページ目以降を別ファイルとして出力したいが、PDFによって総ページ数が15ページの場合や20ページの場合がある)
  • 1ページ1ファイルではなく、特定ページ以降を1つのファイルとして出力したい

2.問題点

  • Power Automate Desktop(以下、PAD)のアクション「新しい PDF ファイルへの PDF ファイル ページの抽出」を使用する場合、「ページ選択」パラメーターにページインデックスを指定しなければならない
  • 特定のページ以降~最終ページまでを指定したい場合、事前に総ページ数を取得しておく必要がある
  • PADにはページ数を取得するためのアクションは存在しない
    用意してくれればいいのにね
    image.png

3.調べたこと

「Power Automate Desktop PDF ページ数 取得」などで検索しました。

↑ 今回出力したいファイルは1つのみでループ処理がないため、この方法では実現が困難・・・

↑ 費用面で制限があり、Acrobat導入は断念しました。
またなるべく他のアプリケーションを介したくなかったので、Edgeを使用しない方法がないか模索しました。

4.試したこと

「新しい PDF ファイルへの PDF ファイル ページの抽出」アクションの「ページ選択」パラメーターで以下を設定し実行してみます。

  • 最終ページインデックスを未指定
    本来は「2-15」のように指定すべきところを、「2-」と最終ページ未指定で実行
    image.png
    [結果] 怒られた
    image.png

  • 最終ページインデックスをありえない数値に指定
    とりあえず1000ページにしてみた
    image.png
    [結果] やっぱり怒られた
    image.png
    しかしエラー詳細を見ると、律儀にも存在しないページの番号が全て記述されています。
    image.png
    ちなみにエラーメッセージ全文をメモ帳にコピペするとこんな感じ↓
    image.png

「ページ番号16~1000は存在しません」ということは、15ページまでは存在するってことですね・・・?
ということで、このエラーメッセージを利用して強行突破してみます。

4.実装方法

全体のフローは以下の通り
image.png

以下、使用したアクションの詳細
★ここでは便宜上PDFファイルのパスなどを各アクションに直接入力してるけど、よいこのみんなはちゃんと変数に格納してね★
★変数名もちゃんと分かりやすいものに変えてね★

①新しい PDF ファイルへの PDF ファイル ページの抽出
PDFパスなどは任意のものを設定
ページ選択:任意のページ番号-ありえない数値
image.png
→このアクションはわざとエラーを発生させる用なので、ページ選択の最終ページインデックスには絶対にありえない数値を指定する必要がある

「エラー発生時」の設定に移り、「フロー実行を続行する」「次のアクションに移動」と設定
image.png

②最後のエラーを取得
パラメーターはそのままでOK
→ここまで実行すると、「4.試したこと」で確認したようにずらーっと存在しないページ番号情報が取得できる
image.png

③テキストのトリミング
元のテキスト:②で取得したエラー情報
モード:指定されたフラグのにあるテキストを取得
終了フラグ:,
image.png
→ここまでで実行すると変数「CroppedText」(元々はエラー情報)が以下のように少しスッキリする
image.png

④テキストのトリミング
元のテキスト:②で取得したエラー情報
モード:指定されたフラグのにあるテキストを取得
終了フラグ:'
image.png
→ここまでで実行すると変数「CroppedText2」に存在しないページ番号の1番目の数字のみが残る
もう一息です。
image.png

⑤テキストを数値に変換
変換するテキスト:④でトリミングした変数
image.png

⑥変数を小さくする
変数:⑤で数値に変換した変数
小さくする値:1
image.png
→⑤までで取得した値は、「存在しないページ番号の1番目」だったので、その1つ前(存在する最後のページ番号)を取得するために値を小さくする
→ここまで実行すると変数「TextAsNumber」にPDFの総ページ数が入る

⑦新しい PDF ファイルへの PDF ファイル ページの抽出
ページ選択:任意のページ番号-⑥で値を小さくした変数
image.png

完成です。
まずは総ページ数が15ページのPDFファイルを指定して実行してみます。
実行後、変数「TextAsNumber」に総ページ数「15」がきちんと入っていますね。
image.png
出力されたPDFも意図した通りでした。

続いて総ページ数が18ページのPDFファイルを指定して実行してみます。
こちらも実行後、変数「TextAsNumber」に総ページ数「18」が入っていました。
PDFも意図した通りです。
image.png

5.注意点

力業なので正直推奨される方法ではないと思います。
でも要望があってどうしても実現したい場合には使えるかな、と!
一見何をしてるのか分かりにくいので、コメントアクションなどを活用した方が良いですね。
未来の自分の首を絞めないためにも!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?