首先附上smsx.cab授权制作工具,地址稍后附上。script授权制作工具
最近一直在弄web打印功能,大概了解了两种控件。
1:smsx.cab
期间遇到的问题大概如下.
1. only one scriptx object can be used per browser window一个浏览器只能有一个factory.printing对象存在。
我的页面是一个jsp包含多个iframe,需要对单个iframe进行打印预览,刚开始在每个iframe包含的页面创建factory.printing,报上面的错误。修改为在最父层页面创建一个全局对象(myPrint)。在子页面(iframe)页面中window.parent.myPrint.Print(true);//我的页面层次只有一层,所以只有一个parent。
2. 局部打印预览。//"pf_"+tabPanelId此参数为iframe的ID
打印:window.parent.myPrint.Print(true,"pf_"+tabPanelId);
预览:window.parent.myPrint.Preview("pf_"+tabPanelId);
但是此功能在IE6下面不好用。报无效的过程调用或参数错误。一直没找到解决办法。
2:WebBrowser 。此控件需要修改IE设置。
具体设置:安全-internet-自定义级别-对未标记为可安全执行脚本Activex控件初始化(启用)
上个帖子中提到,此控件局部预览未找到解决办法,在此贴中附上解决办法。办法如下:
window.parent.frames["pf_"+tabPanelId].WebBrowser.ExecWB(7, 1);//此代码本人测试在IE6以上可以,IE6报没有权限错误。如有人解决望赐教。
针对上述问题,寻找了别的替代方法,即弹出一个新建页面,在页面里去打印。具体代码如下://showTags 要打印预览的ID
var PrintWin = window.open('about:blank', 'Print');
PrintWin.document.write("<html><head>");
PrintWin.document.write("</head><body>")
$(document).find("link").filter(function () {
return $(this).attr("rel").toLowerCase() == "stylesheet";
}).each(function () {
PrintWin.document.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"" + $(this).attr("href") + "\" >");
});
PrintWin.document.write('<object id="WebBrowser" width=0 height=0 classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>' + document.getElementById(showTags).innerHTML );
PrintWin.document.write("</body></html>");
PrintWin.document.all.WebBrowser.ExecWB(7, 1);
PrintWin.close();