事实上IE已经为我们内嵌了WebBrowser控件,已经能够很好的支持我们常用的打印功能了。通过该控件的功能调用,用户可以将当前的Html页面输出到打印机上,用户只需要将要打印的数据组织成Html页面,然后调用WebBrowser的打印功能就可以很好的实现所见即所得的打印功能。不过这种打印存在的缺点就是打印精度不够,如果需要精确定位的打印或套打建议还是使用专用的打印控件实现。下面我们就来讨论如何用WebBrowser打印控件来实现通用报表的打印。
同其他控件一样,首先我们需要在页面中嵌入WebBrowser控件,不过由于该控件是IE浏览器自带的,支持浏览器默认安全设置,因此避免了安全性设置的麻烦。对于IE7及以上安全性要求更高的浏览器,您或许还是需要自定义IE的安全性级别。
<object ID='WB' STYLE="DISPLAY: NONE;" CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></object>
下面就是该控件涉及打印的功能调用,用户可以在JavaScrip中调用:
- document.all.WB.ExecWB(6,1); //打印,打印当前页面
- document.all.WB.ExecWB(7,1); //打印预览
- document.all.WB.ExecWB(8,1); //打印设置,调出系统打印设置对话框
首先生成要打印的HTML页面,调整好打印样式,再在Script中调用上面的打印函数,您要的报表就被打印出来了。当然关于打印样式这里还有一些技巧。
<style media=print> /* media=print 声明该样式对打印有效 */ .Noprint {display:none;} /* 声明了该样式的元素将不会被打印 */ .PageBreak {page-break-after: always;} /* 分页标志,在需要分页的地方插入具有该样式的元素,将自动分页 */ </style>
还有一个不方便的问题是IE浏览器默认会添加页眉和页脚,这在实际应用中是不需要的,因此我们需要在浏览器中将页眉页脚清空,在页面设置对话框中清空页眉页脚即可。还有另一种方法是用VB Script修改本地注册表清除页眉页脚信息。下面是从网络中摘抄的具有该功能的脚本:
<script language="VBScript"> dim hkey_root,hkey_path,hkey_key hkey_root="HKEY_CURRENT_USER" hkey_path="/Software/Microsoft/Internet Explorer/PageSetup" '//设置网页打印的页眉页脚为空 function pagesetup_null() on error resume next Set RegWsh = CreateObject("WScript.Shell") hkey_key="/header" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" hkey_key="/footer" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"" end function '//设置网页打印的页眉页脚为默认值 function pagesetup_default() on error resume next Set RegWsh = CreateObject("WScript.Shell") hkey_key="/header" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&w&b页码,&p/&P" hkey_key="/footer" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"&u&b&d" end function </script>