问题: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)的迭代开发速度。