直接使用默认设置进行打印:(1)使用IE浏览器时利用ScriptX打印网页

        当我们需要为用户打印网页提供方便时,通常这样做:在网页中加入一个“打印”按钮,当用户点击这个按钮时,调用JavaScript中的window.print()方法。但是在调用这个方法时,会弹出“打印”对话框,要求用户选择打印机、设置页码或页面范围、打印份数。如果我们希望调用默认的打印机直接打印一份网页,不要弹出“打印”对话框,就得另找办法。

        我在网上搜索了一下,有人说可以使用 WebBrowser控件,调用WebBrowser.ExecWB()方法,示例如下:

<OBJECT id="WebBrowser" classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" height="0" width="0" VIEWASTEXT></OBJECT>
<script>
function printOut(){
  document.all.WebBrowser.ExecWB(6,2,3);
}
</script>

         网上有人指出,微软发现使用这种方法可能会造成安全问题,从IE 7 开始,不再支持该方法。我在64位Win7平台上使用IE 11测试了一下,发现这种方法确实不行。网上还有人建议仿照下面的示例方法来编写网页html文件:

<html>
<script language="vbscript">
Sub Print()
       OLECMDID_PRINT = 6
       OLECMDEXECOPT_DONTPROMPTUSER = 2
       OLECMDEXECOPT_PROMPTUSER = 1
       call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1)
End Sub
document.write "<object ID='WB' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>"
</script>
 
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <a href="javascript:window.print();">Print</a> </div>
    </form>
</body>
</html>

        经过实际测试,发现还是会弹出“打印”对话框,这种方法也行不通。

        如果使用IE浏览器查看网页,MeadCo公司开发了一款软件ScriptX,它是一个IE浏览器加载项,可以实现很多高级的打印功能,其中包括直接调用默认打印机进行打印。使用它打印时,不会弹出“打印”对话框。虽然ScriptX是一款商业收费软件,但是MeadCo公司大方地允许用户免费使用该软件的基本打印功能。可以在这个网页上看到对如何免费使用ScriptX的介绍:
http://scriptx.meadroid.com/license-pricing/free-deployment.aspx
        下面举一个应用ScriptX的简单例子:
        可以将ScriptX部署在Web服务器端,也可以在用户计算机上预先下载并安装ScriptX。这里为了做一个简单演示,直接下载ScriptX.msi文件,网址是:
http://scriptx.meadroid.com/download/user-upgrade-to-current-version.aspx
        安装该文件以后,在IE中可以看到已存在ScriptX对应的加载项,如下图所示:

 

        在设计网页时,如果我们在网页上放置一个“打印”按钮,并为该按钮编写脚本调用ScriptX,当用户点击该按钮时,执行脚本程序调用ScriptX能够直接调用默认的打印机打印出整个网页。可是如果这样处理,“打印”按钮也会被打印出来,而我们不希望看到打印出来的结果中包含“打印”按钮。要解决这个问题,一种方法是使用Div将“打印”按钮隐藏起来,这种方法在网上可以找到示例。这里介绍另一种方法:将网页分为多个frame,比如在网页中包含两个frame,在frame A中放入一个“打印”按钮,而将需要打印的内容放入frame B。整个网页的示意图如下:

        接下来我们要实现点击frame A中的按钮,打印出frame B中的网页内容,这就需要跨frame调用function。可以按下面的代码设计三个网页:
1) example.html

<html>
<frameset cols="20%,80%">
  <frame src="frame_A.html" name="frame_A" id="frame_A"/>
  <frame src="frame_B.html" name="frame_B" id="frame_B"/>
</frameset>
</html>

2) frame_A.html
<html>

<head> 
  <script type="text/javascript"> 
   function A_click(){ 
       alert("这是frame A中定义函数给出的响应"); 
        } 
  </script> 
</head> 
    
<body> 
   <p>这是frame A</p>
   <input type="button" value="调用frame A中定义的函数" οnclick="A_click();" /> 
   <input type="button" value="调用frame B中定义的函数" οnclick="parent.frame_B.B_click();" />         
   <p></p>
   <input type="button" value="打印frame B" οnclick="parent.frame_B.printWindow();" /> 
</body>

</html>


3) frame_B.html

<html>

<head> 
  <script type="text/javascript"> 
   function B_click(){ 
       alert("这是frame B中定义函数给出的响应"); 
        } 
  </script> 
</head> 
    
<body> 
   <p>这是frame B</p>
   <input type="button" value="调用frame A中定义的函数" οnclick="parent.frame_A.A_click();" /> 
   <input type="button" value="调用frame B中定义的函数" οnclick="B_click();" /> 

<!-- MeadCo ScriptX -->
<object id=factory style="display:none" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814">
</object>

<script type="text/javascript"> 
function printWindow()
{
  factory.printing.header = "使用ScriptX打印测试";
  factory.printing.portrait = true;
  factory.printing.leftMargin = 1.0;
  factory.printing.topMargin = 1.0;
  factory.printing.rightMargin = 1.0;
  factory.printing.bottomMargin = 1.0;
  factory.printing.Print(false);
} 
</script> 

</body>

</html>

        为了测试实际效果,需要将example.html、frame_A.html、frame_B.html这三个网页部署到一台Web服务器上。为了做一个简单测试,没有必要使用Apache或IIS这样重量级的Web服务器软件,建议使用Abyss Web Server X1,这个软件轻巧好用,并且是免费的。如果希望用到更多的功能,还可以购买收费的版本Abyss Web Server X2。Abyss Web Server软件的官网是:http://aprelium.com/,其中X1的下载网址是:http://aprelium.com/abyssws/download.php 。下载安装Abyss Web Server X1之后,将example.html、frame_A.html、frame_B.html这三个网页文件拷贝到Abyss Web Server X1安装目录的htdocs子目录下。启动Abyss Web Server X1,打开IE浏览器,输入网址:http://localhost/example.html,显示如下图:

        点击frame A中的“打印frame B”按钮,就可以调用默认的打印设置,直接将frame B中的内容打印出来,不会弹出“打印”设置对话框。在frame A和frame B中,还放入了一些其他按钮,这些按钮是用来演示跨frame调用function的。如果只关注打印的话,可以忽略它们。
       为了获得更好的打印效果,可以在frame_B.html的printWindow()  function中对打印页的header、footer、页边距做一些简单的设置。如果希望在使用ScriptX时进行更高级的打印设置,就要向MeadCo公司购买License了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值