印刷は、おおむね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=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
0 件のコメント:
コメントを投稿