電話による営業、セールスはお断りしております。誠に申し訳ございませんが、問い合わせフォームよりお願い致します。 お問い合わせはコチラ

コマンドライン実行でPDFを印刷する

こんにちは。
自称)BizRobo!エンジニアのもりりんです。

今回は、「コマンドライン実行でPDFを印刷する」というテーマです。
以前書いた「コマンドライン実行でPDFを印刷する」の記事が、結構見られているとのことでコマンドライン関連で書いてみようと思います。
当分は、コマンドライン関連の記事をアップしていきます。

PDF印刷については、公式ナレッジを含め情報が公開されていますが、どうしてそのコマンドになるのかは紹介していない記事が多いかと思います。
今回は、Adobeの「Acrobat Reader」のコマンド部分を簡単に解説します。

目次

はじめに

2022.06.30追記
一部サイトのURLがエラーになっておりました。
申し訳ございません。

Acrobat Readerを利用したPDF印刷に関しては、冒頭でも述べたように公式ナレッジにも記事が出ています。

ですが、2022.06.22時点で公式からインストールできるものは「Acrobata Reader DC(2022.001.20142) 」のみになっているようです。

Adobe Acrobat Reader ~ソフトウェアダウンロード~

既にご利用中の場合、Acrobat Readerの利用バージョンによってはサポート切れになった可能性もありますので、ご利用の場合は一度ご確認ください。

Adobe Acrobat 2017 (永続版)のサポートは2022年6月6日に終了します

また、Adobe Acrobat Reader DC(22.001.20117)以前を利用している方は、脆弱性の指摘もされているためバージョンアップしておきましょう。

コマンド解説

では、公式ナレッジの印刷コマンドを確認していきましょう。

Rows
1行目

こちらは、簡単ですね。
 他アプリを実行するstartコマンドを利用して、目的のアプリを実行しているだけです。

注意点は、「/t」オプションです。
 ファイル名は必須ですが、プリンター名以降は任意となっており、省略した場合はデフォルトプリンターが利用されます。
 似たオプションに「/p」があります。
 こちらは、印刷ダイアログを表示します。

Rows
2行目

2行目は、あくまでも印刷指示は一方通行のため正常に指示が飛んだか把握できず、すぐに終了してもいいのかわからないためpingの疎通確認を利用し待機処理としています。
ナレッジでは16回分なので、約12~16秒程でしょうか。

 他ブログでは、10回を指定していることもあります。
 RPAで利用するようなPCは高メモリ/(HDDに比べ)SSDの高速I/Oが一般的のため16回分も待つ必要はないかと思います。

Rows
3行目

最後は、タスクキルですね。
Acrobat Reader特有の方法となります。
他社製のPDFツールでは、タスクキルはほぼ不要です。

Acrobata Readerは、「アプリそのもの」と「pdfを表示するタブ」の2段構成になっています。
画面上でPDFを表示すると、①Acrobata Readerアプリが起動、②アプリ内にタブが作成されPDFが表示されます。

Acrobata Readerは、上記の仕組みを実現するため①アプリそのものを管理するプロセス、②PDFを開くプロセスが分離される設計となっています。

では、先ほどの1行目のコマンドを振り返ると、①アプリの起動②PDFの表示+印刷が実行されます。
「/t」は印刷用オプションのため、印刷指示が終わると自動でPDFは閉じられる。すなわち、②のプロセスのみ終了します。

そうなると、①のプロセスは起動したまま放置されることになります。
起動したままでも影響は少ないかと思いますが、ロボットが起動したアプリを後片付けもせず放置しているってマナー的にはダメですよね。
ということで、後片付けをするためのコマンドが3行目となります。

しかし、Acrobata Readerの後片付けも一癖あります。

Acrobata Readerアプリのプロセスには、プロセスID(Windows上で動くプロセスを一意で識別する管理番号)が付与されていません。
Widnowsでは、プロセスIDのことをウィンドウハンドルと呼びます。

本来はアプリ起動後もウィンドウハンドルを指定することで、プロセスを操作することが可能です。

しかし、Acrobata Readerは管理プロセスの起動時にウィンドウハンドル(管理番号)を割り当てていません。
起動したプロセスを特定できない場合は、起動元のアプリケーション(exe)を指定してプロセスを削除します。

説明画像にも注意点を記載していますが、起動元のアプリケーション(exe)から実行されている全プロセスを問答無用で強制終了されます。

改めて、3行目のコマンドを確認しておきましょう。

説明が長かったですが、3行目でなぜこの処理を実施しているのか理解できかと思います。
もし分からないという方は、(vbsによる自動化を目的としていますが)要点がまとめられているので、以下の記事もぜひ参考にしてください。

おまけ

コマンドプロンプトでの紹介でしたが、startを使わない方法はあるのか?と疑問になりませんでしたか?

もちろん、あります。
起動したいアプリケーションが配置されているフォルダにフォーカスを変更(cdコマンド)し、該当アプリケーション(exe)を起動するだけです。 

こちらの操作は、PowerShellでも同様の操作になります。
※私の環境では「AcroRd32.exe」ではなく「Acrobat.exe」になっています。

startコマンドを利用しない方法

PowerShellで実行する場合は、startコマンドの代わりに「Start-Proccess」を利用します。
「Start-Proccess」では、実行するアプリケーションを「-FilePath」、アプリケーションに渡すパラメータを「-ArgumentList」として指定します。
※「-ArgumentList」は、パラメータをカンマ区切りで指定することに注意しましょう。

PowerShellを利用する場合

なお、BizRobo!のコマンドライン実行でPoweShellコマンドを利用する場合は、「powershell ~」から始めるようにしてください。
過去にZipを展開する記事でも紹介していますので、見ていただけると幸いです。

最後に

今回は、以前ユーザ様に問い合わせいただいたことを思い出したり、標準機能で自動印刷したいという要望を個人的に無償奉仕したことがきっかけで、思いつくままに書いてみました。
個人奉仕の件は、vbsやbatを駆使しデータ加工も入っていたため、お金もらってもよくね?って感じの出来栄えになりました。
いずれ、RPAを使わなくてもWindows標準でここまでできる!って記事を書いてみたいなと思います。

さて、今回のPDFですが、RPA関連の記事では使い方のみ記載されていること多く、どうしてこうなるのか?の疑問を解決できる記事はプログラミングに準じた内容が分かる人向けでした。
そういったサイトでも意外にコードよりも文章で書かれている記事は多いのですが、知識がある前提での説明のため最初の方で挫折することも多いかと思います。
私も何回も見直して調べました….(ウィンドウハンドルという名前を知りました。)

ともあれ、今回書いた記事が少しでもWindowsの仕組みの理解やBizRobo!での活用に役立てていただければと思います。

今回も最後まで読んでいただきありがとうございました。

目次