浅浅浅浅浅浅.......谈Web打印

  被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="打印" onclick="printTure();">&nbsp;&nbsp;
    <input type="button" class="tab" value="打印预览" onclick="printpr();">
    <input type="hidden" name="qingkongyema" id="qingkongyema" class="tab" value="清空页码" onclick="pagesetup_null()">&nbsp;&nbsp;
    <input type="hidden" class="tab" value="恢复页码" onclick="pagesetup_default()">
</div>
忽悠到这不知道该写什么了,代码其实很简单,量也很小,就是我废话多了点~ 呵呵
各位大侠见笑了~

希望大家多注重愿意,实现功能,不是目的~

 

 

 

 

 


 

posted on 2008-09-19 14:16  袁枫  阅读(603)  评论(4编辑  收藏  举报

导航