印刷は、おおむねpdfで実現している(逃げている)が、自動で印刷したいとニーズも多い。
調べてみたが、どうもすっきりした手がない。恐らく、正解はsambaでプリンターサーバを立てることではないかと推定しているが、大掛かりすぎるな。
結局、Webアプリケーションを稼働させているサーバ(windows)にアクロバットリーダをインストールし、oleで操作することにした。pdfファイルを右クリックし、コンテクストメニューの「印刷」を選んで印刷する。この操作をOLEで実現することだ。
掲示版で記載されていたアイディアの拝借です。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/40924
Linuxサーバでは使えないが、Net::ssh/sftpライブラリを使って、リモートのwindowsプリンタサーバにpdfファイルを送信して、このプログラムをキックさせれば良いだろう。
事前作業は2つ。
- アクロバットリーダインストール
- Active Script Ruby
- #!ruby -Ks
- =begin
- filename : print.rb
- 必ず ファイルをShiftJISにて保管すること
- 実行 : $ ruby print.rb <pdf file="">
- =end
- require 'win32ole' # oleを操作するライブラリ
- class WIN32OLE
- include Enumerable # oleのコレクション操作にeachを使うため(かな?)
- end
- parent, name = File.split(File.expand_path(ARGV.shift))
- parent.gsub!("/", "¥¥") # フルパス指定するときに問題にならないように
- shell = WIN32OLE.new('Shell.Application') # シェルを起動
- verbs = shell.NameSpace(parent).ParseName(name).Verbs # コンテクストコマンドリスト取得
- if v = verbs.find {|v| v.Name == "印刷(&P)" }
- v.doIt
- sleep(2) # 起動が遅い場合 (excel とか),少し待ってあげないとだめ(らしい)。
- end
- </pdf>
0 件のコメント:
コメントを投稿