Power Automate Desktop: Acrobat を使ってPDFのページ数を取得
Power Automate for Desktop の機能で PDFファイルのページ数を調べるのは容易ではないという話を書きました。
Power Automate DesktopでPDFのページ数を取得するのは難しい
Acrobat で取得する
原始的ですが、Acrobat を起動してプロパティからページ数を取得する方法を書いてみます。
全体の流れは次の通りです。
1. 「フォルダー内のファイルを取得」アクションで、フォルダー内の PDF ファイルを取得します。
アプリケーションパス」acrobat.exe
コマンドライン引数: %CurrentItem.FullName%
コマンドライン引数に /n %CurrentItem.FullName% を指定するとMDIインターフェイスでも別インスタンス(別ウィンドウ)で開かれます。こちらの方がベターかもしれません。
アプリケーション起動後には「アプリケーションの読み込みを待機」を指定します。効果はないかもしれません。
メインウィンドウのハンドルを取得できないことが多いので、「エラー発生時」をクリックし、「詳細」の「アプリケーションのメインウィンドウハンドルを取得できません」で、「フロー実行を続行する」を選択します。
4. 「ウィンドウの取得」アクションで「フォアグラウンドウィンドウ」の情報を取得します。
ウィンドウの情報が AutomationWindow に保存されます。
本当は「アプリケーションの実行」アクションでウィンドウハンドルを取得できるのがベストなのですが、なぜかエラーが発生するため、やむを得ずフォアグラウンドウィンドウ(手前の)の情報を取得しています。
私の環境では待機なしで取得できていますが、遅いPCなどの場合には、この前にWaitが必要かもしれません。
5. 「キーの送信」アクションで、Acrobatに対して、Ctrl+D を送信し、PDFファイルのプロパティを開きます。
キーの送信先: ウィンドウインスタンス/ハンドル
ウィンドウインスタンス: %AutomationWindow%
送信するテキスト: {Control}({D})
(ウィンドウが複数開いている時のために AutomationWindow を指定しています)
6. 「ウィンドウにある UI 要素の詳細を取得する」アクションでページ数のテキストを取得します。
UI要素にはページ数を指定します。
属性名は OwnText を取得します。
問題なければ、 AttributeValue にページ数が保存されます。
7. 「ウィンドウ内のボタンを押す」アクションで、キャンセルボタンを押します。
追加した UI 要素のウィンドウは、タイトルに表示されたファイル名に関連づいているため、そのままでは別のファイルを処理する際にウィンドウが見つからなくなります。
そのため、ウィンドウを開きます。
Acrobat がSDI(Single Document Interface。ウィンドウごとに一つの文書を表示するインターフェイス)で起動されていて、既に別のウィンドウで文書が開かれていると、UI要素を見つけることができずエラーになります。
そのため、ウィンドウを識別するウィンドウハンドルをウィンドウに埋め込みます。MDI(Multi Document Inteface。ウィンドウに複数の文書を開くインターフェイス。Acrobat の場合はタブで切り替え)でしか使わないという方は不要です。
(Acrobatの「環境設定」で、「一般」の「同じウィンドウで新しいタブとして文書を開く」のチェックが外れていると SDI モードになります)
通常の画面では入力できないので、テキストエディターに切り替えます。
条件追加後のセレクターは次の通りになります。
:desktop > window[Process="Acrobat"][handle="%AutomationWindow.Handle%"]
最初、ダブルクォーテーションがないため正しく動作していませんでした。
アサヒロボ研さん、ありがとうございます!
8. 「キーの送信」アクションで、ファイルを閉じます。
ウィンドウインスタンス: %AutomationWindow%
送信するテキスト: {Control}({W})
「アプリケーションの実行」でコマンドライン引数に /n をつけている場合は MDI であっても別ウィンドウで開かれます。そうすると Ctrl-W だとウィンドウが残ってしまいます。
/n オプションを使った場合は、{Control}({Q}) でアプリケーションを終了した方が良いでしょう。
Edge版も作りました
Power Automate Desktop: Edge を使ってPDFのページ数を取得
Acrobat Proなら簡単かも
先日、Photoshopの自動化を調べていたら、COMオブジェクトなる単語が出てきて驚きました。ってことはPhotoshopはVBAから制御できるのでは?
そして、参照設定を見ると、なんとPhotoshopだけでなく、Acrobatの文字もあるではないですか!?
下の方にIllustratorも見えてます |
これを使えばVBAから操作できるのでは? VBScriptを使ってPower Automate for Desktopからもページ数を取得できるのでは!? と期待に胸を膨らませました。
ドキュメントオブジェクトのPDDocにはGetNumPagesなる、いかにもページ数を取れそうなメソッドもあります。
実際に取得方法が説明されているページがありました。
AcroExch.PDDoc: GetNumPages メソッド
だがしかし、Acrobatのインスタンスを取得するところでエラーが発生しました。調べると、どうやら、有料版の Acrobat Pro だとできるような話がありました…
コメント
コメントを投稿