是的,今天的文章标题是《在BS架构中控制浏览器直接打印》,记得之前我说过最近在做1个叫《智慧街区》的项目,里面需要攻克的第2个难点就是,客户端浏览器直接操作打印机的问题。
在BS架构中,有的时候我们需要控制浏览器直接进行打印,而不是弹出打印对话框,使用window.print()在此时就无法满足我们的需求。
我Google了1下,有多种方法,在这之前我就思考过这样1种方法:我们知道xhtml里是可以创建object对象的,比如几年前我们通过object调用Realplay、Windows Media Player播放器,这种object对象,会有2个参数叫codebase和classid,当客户端没有相关activeX插件的时候会通过codebase指定的地址进行下载,而classid是该插件在客户端注册表中的唯一对象标识。下面的代码同样可以操作打印机,这是在网上抄的,仅支持IE哦,因为IE支持ActiveX。
<OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0>
</OBJECT>
<input type=button value="打印" onclick="document.all.WebBrowser.ExecWB(6,1)">
<input type=button value="直接打印" onclick="document.all.WebBrowser.ExecWB(6,6)">
<input type=button value="页面设置" onclick="document.all.WebBrowser.ExecWB(8,1)">
我在实际使用中发现上面的第2个按钮“直接打印”并不起作用,依然弹出对话框。
不过我知道我的思路是正确的,肯定是需要在客户端上安装ActiveX插件,于是google出这样1个插件ScriptX,欣喜。
ScriptX官方网站:http://scriptx.meadroid.com/home.aspx
下载Resource Kit后进行解压安装,在xhtml代码中使用该对象进行操作,便支持直接打印,ScriptX的详细参数见:http://scriptx.meadroid.com/knowledge-bank/technical-reference.aspx
我这里做1些简单的示例:
<object id="factory" codebase="smsx.cab" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814">
</object>
<input type="button" value="直接打印" onclick="factory.printing.print(false)">
<input type="button" value="预览" onclick="factory.printing.preview()" />
OK,本次文章到此结束,其实我不太善于写文章的。