被Web打印困扰了好一阵子了,也不能说困扰功能已经实现,就是无论用什么方式去实现,都感觉不是非常完美,记得一个高人的帖子的命题"尴尬的Web打印",确实是如此的! 自从开始写打印页的那天,一直到今天我也翻阅了无数高人的帖子了,从中受益匪浅啊!甚是感谢~今天我也来浅谈一下Web打印....总是一个自己对Web打印的总结吧,其中会借鉴一些在网上频繁出现的一些代码,再加入个人的一些看法. Web打印至今大概的解决方法分两大类,一种是在页面直接打印,另一种是导出到本地,然后再通过本地打印.然后直接打印的控制方法1.JavaScript.2.ActiveX.3水晶报表.4.自定义打印模版.5.使用收费的专业打印软件.无论各种打印方式,各有利弊,我先简单对比下,然后我只会谈到JavaScript的具体代码,希望使用其他方式解决的朋友,可要参照网上的海量代码!谢谢 1.水静报表--能够简单实现表格打印,但是样式单一,对于一切整体报告(内包含图片等等)不易实现. 2.ActiveX控件,需要客户端下载,首先需要用户在IE的安全设置里允许下载安装ActiveX控件,但是对于大范围的用户其实这是一个很头疼的问题,在这个病毒泛滥的网络时代,对于一些对电脑不是非常了解的用户来说,他往往不知道怎么去设置IE的安全,而且他会下载一些防火墙,而这些防火墙还会阻挡ActiveX控件的下载,用户不知道怎么回事,对他们来说,只有一个现象,打印功能实现不了! 3.自定义打印模版,其实等于自己写一个ActiveX控件,不多说了!但是如果你面临的用户对电脑比较熟悉,或者对方的电脑是由甲方提供,那你可以这样,因为它功能强大!具体的代码请见http://www.cnblogs.com/Yahong111/category/108469.html 4.现在还有一些专业的收费打印控件,对于一般的公司来说,做一个打印功能还需要下载,天啊,老总的头肯定摇的跟拨浪鼓似的,然后再给你追加一句,我请你来是干什么的!...-_-! 5.导出成PDF或者Word,在本地打印,这个方式其实也不错!最少效果得以保证,缺点是客户端需要安装相关浏览工具,再一个就是步骤繁琐,也许我个人觉得这算什么,点两下的事情,但是用户就是上帝啊,对于菜鸟级的用户来说,每多点一下都是很头疼的...但是我还是想说一下导出成PDF格式,其实这个方法真的不错,这个格式已经被广大用户所接受,我打算在下篇文章里详细讨论这个技术!呵呵 OK,废了这么多话,咱们来看看用Js控制打印!说下原理,他调用的是IE自带的'WebBrowser'打印,其实每个网页,当你单机工具栏上的文件的时候都会看到一个打印选项,其实每个页面都是可以支持打印的!只是被大多数用户忽略了,然后Js通过脚本修改注册表,修改打印的各个选项,来实现对页面的控制,最后把打印按钮的DIV层隐藏掉.原理就是这样了,这段代码在2003年就已经出现过了!然后有很多人说这代码过时了,已经不支持现在的IE6,IE7了,其实不然,只不过依然也要设置一下IE的安全.....唉真TNND头疼!没办法了,这已经是最好的方案了!具体代码如下! 这里是Js脚本 <script language="javascript"> function printpr() //预览函数 { document.all.item('chengetable').className="chenge"; document.all("qingkongyema").click();//打印之前去掉页眉,页脚 document.all("dayinDiv").style.display="none"; //打印之前先隐藏不想打印输出的元素(此例中隐藏“打印”和“打印预览”两个按钮) var OLECMDID = 7; var PROMPT = 1; var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>'; document.body.insertAdjacentHTML('beforeEnd', WebBrowser); WebBrowser1.ExecWB(OLECMDID, PROMPT); WebBrowser1.outerHTML = ""; //window.opener=null; //打印结束只有关闭该页 //window.open('','_self'); //window.close(); document.all("dayinDiv").style.display="";//打印之后将该元素显示出来(显示出“打印”和“打印预览”两个按钮,方便别人下次打印) } function printTure() //打印函数 { document.all.item('chengetable').className="chenge"; document.all('qingkongyema').click();//同上 document.all("dayinDiv").style.display="none";//同上 var OLECMDID = 6; var PROMPT = 1; var WebBrowser = '<OBJECT ID="WebBrowser1" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>'; document.body.insertAdjacentHTML('beforeEnd', WebBrowser); WebBrowser1.ExecWB(OLECMDID, PROMPT); WebBrowser1.outerHTML = ""; window.opener=null; window.open('','_self'); window.close(); document.all("dayinDiv").style.display=""; } </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,"" '键值设定--页脚 hkey_key="\margin_left" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"0.12" '键值设定--左边边界
hkey_key="\margin_top" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"0.7" '键值设定--上边边界
hkey_key="\margin_right" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"0.12" '键值设定--右边边界
hkey_key="\margin_bottom" RegWsh.RegWrite hkey_root+hkey_path+hkey_key,"0.7" '键值设定--下边边界 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>
//下面这段是一个打印按钮,一个打印预览按钮 放在Html代码段里 <div align="right" id="dayinDiv" name="dayinDiv"> <input type="button" class="tab" value="打印" οnclick="printTure();"> <input type="button" class="tab" value="打印预览" οnclick="printpr();"> <input type="hidden" name="qingkongyema" id="qingkongyema" class="tab" value="清空页码" οnclick="pagesetup_null()"> <input type="hidden" class="tab" value="恢复页码" οnclick="pagesetup_default()"> </div> 忽悠到这不知道该写什么了,代码其实很简单,量也很小,就是我废话多了点~ 呵呵 各位大侠见笑了~
希望大家多注重愿意,实现功能,不是目的~
转载于:https://www.cnblogs.com/ioricool/archive/2008/09/19/1294084.html
相关资源:浅谈ASP.Net Core WebApi几种版本控制对比.pdf