1
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.

【Ruby】Adobe Acrobat Reader DC印刷コマンド実行の注意点

Last updated at Posted at 2022-11-20

Rubyで印刷する

RubyではKernelモジュールのお陰でRubyファイル上からでもコマンドプロンプトが叩けるようになっている。

# プロセス完了まで待つコマンド実行
process1 = system "dir"
# プロセス実行が完了したらRubyのプロセスに戻る
process2 = spawn "dir"

印刷する場合はAdobe Acrobat Reader DCのシステムコールを使用して実行すれば良い

"(exeまでのパス)\AcroRd32.exe" /s /l /h /t "(PDFファイルのフルパス)" "(プリンタ名)"

※64bit版はAcrobat.exe
※オプションの意味は本題とずれるのでググってくれ!

本題

上記方法を使用すれば印刷はできるが、systemspawnのどちらを使用すべきかと言われたら迷わずspawnをお勧めする。

印刷の自動化が要求される場面は、昔ながらの書類管理をしている業務の自動化くらいだろう。
そういう現場でよくあるのが、印刷プロセスのスタックである。

ワイがRPA案件で参加していた会社では受発注システムへの注文登録後、注文書を印刷をすることが義務付けられていた。
そこで発生したのは印刷プロセス実行時のネットワークの一時的な断絶、そして大量の印刷プロセスがあることによるRuby側のスタックである。
当時はsystemを使用していたことにより、印刷が成功したというプロセスが返ってくるまでRuby側がスタックしてしまう現象が発生していた。

spawnを使用すればRuby側の実行とコマンドプロンプト側の実行を別個にできるので、Rubyのスタックは発生しない。

もし実行完了までのタイムアウト時間が欲しいのであれば、Threadを使用するか、1秒ごとに印刷プロセスを監視する処理を作成すれば良い。

個人的な感覚としては、systemはサーバ内で完結する処理で使用し、spawnは外部接続関連の処理で使用するのが良い印象。

まとめ

  • Rubyで印刷コマンドを実行する場合はspawnを使用する。
  • 印刷プロセスはスタックしやすい。
  • systemはサーバ内で完結する処理で使用する。
  • spawnは外部接続関連の処理で使用する。

保守って辛いよな、兄弟。

1
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
1
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?