使用webBrowser控件进行无需选择打印机直接打印
以前做的一个系统(内部小型局域网,在线售票系统),采用的是基于浏览器的打印方式,客户提出在每次打印时都必须选择一次打印机,即在调用window.print()的时候弹出选择打印机的界面,这样很费时间,能不能去掉。
后来在网上找了一些控件,比较有名的就是scriptx这个控件,它可以实现打印控制,包括控制边距,选择页数等。的确很不错,不过很可惜,这个控件是收费的,而且破解版根本就找不到,要不就是已经失效了。估计内部使用了基于联网的方式进行认证。
而且该控件提供的免费版中,方法factory.printing.print(false)基本起不到预期的作用,本来想不弹出选择界面,结果还是不能幸免。于是放弃寻找破解版的念头,寻找其他的控件吧。后台终于找到可以使用windows自带的webBrowrser进行操作了,因为笔者的需求很简单,不需要控制打印选项这些,就是想直接使用默认的打印机,不弹出打印选择界面而已。OK,以下是实现代码,很简单的(主要是后面有一些限制)//界面上
<object ID="PrintCommandObject" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>
//javascript
var PrintCommand = document.getElementById("PrintCommandObject");
PrintCommandObject.ExecWB(6, 2);//这里使用的是6,2参数,有的说6,6,笔者测试不通过就是取得控件信息,调用ExecWeb参数就可以了。里面的参数可以填其他,当然就是其他的含义了。这里使用了6,2就是直接打印。这个控件有一些限制如下:
在ie8,ie9下必须使用兼容模式,因为特别是在ie9下,已经默认禁用了不安全的控件。
将站点网站添加进信任网站列表中,以允许控件运行。
在ie9下,在安全选项中的信任站点设置中,允许<运行并初始化不安全的控件>
这几个限制,惟一麻烦的就是将网站加到信任列表中,这需要为每一个客户机进行IE设置。当然,这对于小型的局域网应该问题不大,就是多一次部署实施或者在文档中加以注明而已。对于互联网还是不要使用这种方式了