web呼叫本地方法,並實現列印功能(螢幕解析度導致列印斷斷續續不清晰)
問題:java web開發進銷存系統,使用者需求打印出貨單,一開始採取js的window.print方法,測試環境效果不錯,挪移到使用者那裡時列印結果出現字型斷斷續續不清晰的情況,然而用我的電腦列印時卻不會出現如此狀況,進而懷疑是使用者的機器問題,多方查證是因為使用者電腦的解析度過低,猜測是瀏覽器列印時是通過圖片的形式傳送的,所以解析度低的前提下生成的圖片通過印表機打印出來的效果也不佳。
解決方案:
1、讓使用者升級硬體裝置,直接通過提高機器解析度來解決問題;
2、直接通過傳送對應流實現本地列印。
方案一:老闆嘿嘿嘿。
方案二:老闆點點頭。
*************************************************我是分隔線********************************************
方案二問題:
1、web如何呼叫本地程式?
2、本地程式如何實現列印功能?
3、web如何傳遞引數給本地程式?
解決方案:
@問題1:web如何呼叫本地程式?
利用URL Protocol來實現:
step1:登錄檔中註冊對應資訊。
程式碼如下:
[HKEY_CLASSES_ROOT\zlprotocol] @="zlprotocol Protocol" "URL Protocol"="" [HKEY_CLASSES_ROOT\zlprotocol\DefaultIcon] @="G:\\Temp\\PrintUIComponent.bat" [HKEY_CLASSES_ROOT\zlprotocol\Shell] [HKEY_CLASSES_ROOT\zlprotocol\Shell\Open] [HKEY_CLASSES_ROOT\zlprotocol\Shell\Open\Command] @="G:\\Temp\\PrintUIComponent.bat %1"
step2:web中的呼叫方式很簡單。
<a href="zlprotocol://testid:11">print</a>
@問題2:本地程式如何實現列印功能?
因為WEB是用到了java來進行開發的,因此本次專案中也用到了java來開發列印程式,直接利用java.awt.print包提供的方法來實現列印功能。具體的實現方式可以百度下很多例項供參考。貼程式碼的話就太長了。
@問題3:web如何傳遞引數給本地程式?
玄機就在web呼叫的時候的testid:11,以及登錄檔中的鍵值中的%1,通過本地程式的main方法入口的arg[0]就可以獲取到對應的引數資訊,在實際運用中本地程式得到的值是zlprotocol://testid:11/,所以還需要程式內做進一步的解析。
至此,通過web呼叫本地程式實現本地列印的方式順利實現。
*************************************************我是分隔線********************************************
總結:瞭解機制很重要,前段時間閱讀的《深入分析java web技術內幕》對此次思路的形成過程很有幫助,時刻記住最小化可行產品(MVP)的迭代開發速度。