AIRから印刷ダイアログを出さないで印刷したい
AIRでキオスク端末みたなものを作っているのですが、その画面に表示されている「印刷」ボタンを押せば印刷ダイアログなしでローカルに保存されているPDFを印刷する方法を考えていました。
どうもAIR(Flex)のprintjobだけでは印刷ダイアログがどうしても出てしまうので、ここはひとつ印刷サーバを立てて、そのサーバが代わって印刷してくれるようにしました。サーバ側はいつものpythonを使い、ダイアログなしで印刷するためにGSViewに付属する「gsprint」を用いました。gsprint ならコマンド内で完結しますので、印刷ダイアログが出ません。AIRとの通信はAMFを使っています。OSはWindwosです。
import os from pyamf.remoting.gateway.wsgi import WSGIGateway from wsgiref import simple_server def printPdf(name): os.chdir('D:') return os.system('gsprint ' + name) services = {'printPdf': printPdf} if __name__ == '__main__': gw = WSGIGateway(services) httpd = simple_server.WSGIServer( ('localhost', 8000), simple_server.WSGIRequestHandler, ) httpd.set_app(gw) print "Running PDF Print Server on http://localhost:8000" try: httpd.serve_forever() except KeyboardInterrupt: pass
印刷しているのは os.system('gsprint ' + name) で、name に印刷したいファイル名をフルパスで入れれば印刷ダイアログなしで印刷できます。
ついでに、AIR側では
gateway = new NetConnection(); gateway.connect("http://localhost:8000"); var param:String = input.text; // ファイル名 var responder:Responder = new Responder(onResult, onFault); gateway.call("printPdf", responder, param); // ここでサーバ側のprintPdfをコールする。
もっとスマートな方法があれば教えてください!