smsx.cab插件实现打印的依赖的是ActiveX控件,所以缺点很明显:页面得允许运行ActiveX控件,而ActiveX控件只有IE支持,所以局限性很强。
页面基本结构:
<div id="floatDiv" align="right">
<input style="color: #fff; font-size: 16px" οnclick="printTures();" type="button" value="打印"/>
<input style="color: #fff; font-size: 16px" οnclick="printpage();" type="button" value="打印预览"/>
<input style="color: #fff; font-size: 16px" οnclick="pageReSet();" type="button" value="页面设置"/>
</div>
<div id="page"></div>
JS实现:
//打击“打印”按钮时触发该事件 function printTures(){ $("body").append("<OBJECT id=\"factory\" codeBase=\"redist/smsx.cab#Version=6,3,434,26\" height=\"0\" width=\"0\" classid=\"clsid:1663ed61-23eb-11d2-b92f-008048fdd814\" viewastext></OBJECT>"); //取消打印区域的浮动 var printdiv = document.getElementById("page"); printdiv.style.overflow=""; printBase();//进行打印设置 //将打印按钮和打印预览按钮隐藏掉 document.getElementById("floatDiv").style.display = "none";// 隐藏按钮 //进行打印:无确认打印,true时打印前需进行确认 factory.printing.Print(false); //打印完成返回项目列表 $("#factory").remove(); } //打击“打印预览”按钮时触发该事件 function printpage(){ $("body").append("<OBJECT id=\"factory\" codeBase=\"redist/smsx.cab#Version=6,3,434,26\" height=\"0\" width=\"0\" classid=\"clsid:1663ed61-23eb-11d2-b92f-008048fdd814\" viewastext></OBJECT>"); //取消打印区域的浮动 var printdiv = document.getElementById("page"); printdiv.style.overflow=""; printBase();//进行打印设置 //将打印按钮和打印预览按钮隐藏掉 document.getElementById("floatDiv").style.display = "none";// 隐藏按钮 //进行预览 factory.printing.Preview(); //打印完成返回项目列表 printdiv.style.overflow="auto"; //将打印按钮和打印预览按钮隐藏掉 document.getElementById("floatDiv").style.display = "block";// 隐藏按钮 $("#factory").remove(); } /**页面设置 */ function pageReSet(){ printBase(); factory.printing.PageSetup(); } // 用于设置打印参数 function printBase() { factory.printing.header = ""; // 页眉 factory.printing.footer = ""; // 页脚 factory.printing.portrait = true; // true为纵向打印,false为横向打印 factory.printing.leftMargin = 19.05; factory.printing.topMargin = 0; factory.printing.rightMargin = 0; factory.printing.bottomMargin = 0; }
注意: <Object>标签中的codeBase=\"redist/smsx.cab#Version=6,3,434,26\"目录下得有对应的文件
用这个插件唯一的感受就是:调顺了很好使,调不顺了很麻烦。一旦出问题了调试起来也麻烦,因为它跟浏览器挂钩它还要往操作系统中写东西,这就牵扯到安全性问题了,反过来若是浏览器或操作系统的设置有变化它也可能被影响到,所以对于它来说“上午用的好好的下午就不能用了是常态”。
可能碰到的问题:若是页面上同时存在“打印”和“打印按钮”,且两个按钮都点击了(如先点打印不刷新的情况下再点打印预览),那么点第二个按钮时可能会报错:only one scriptx object can be used per browser window。解决方法可以参考这个链接:http://blog.csdn.net/zhao19861029/article/details/8283347
跟Jquery打印一样,说下优缺点:
缺点:兼容性不好,只能IE使用;容易出问题,且调试麻烦;
优点:可预览;配置好之后打印时不会弹出打印框让选打印机,也可以设置页眉页脚、页边距;
最后贴几个对smsx.cab插件有帮助的链接:
1、 针对web打印控件的使用心得 :http://blog.csdn.net/zhao19861029/article/details/8283347
2、IE下使用smsx.cab组件实现打印和打印预览功能:http://blog.csdn.net/zhao19861029/article/details/8270194
3、ScriptX,smsx打印控件安装的终极解决办法:http://blog.csdn.net/yjlwl1213/article/details/3929848