总结JS打印方法

    技术2022-05-20  64

    http://ltc603.javaeye.com/blog/123191

     

     

    对JS的打印方法总结一下,方便日后查阅。 一.用JS自带函数打印 直接调用

    Java代码 <a href="javascript:window.print();">打印</a>   <a href="javascript:window.print();">打印</a>

    二.IEWebBrowser组件 介绍 http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q267240#top http://support.microsoft.com/kb/q247671/#appliesto

    Java代码 <OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>    <input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打开>   <input name=Button onClick=document.all.WebBrowser.ExecWB(2,1) type=button value=关闭所有>   <input name=Button onClick=document.all.WebBrowser.ExecWB(4,1) type=button value=另存为>    <input name=Button onClick=document.all.WebBrowser.ExecWB(6,1) type=button value=打印>   <input name=Button onClick=document.all.WebBrowser.ExecWB(6,6) type=button value=直接打印>   <input name=Button onClick=document.all.WebBrowser.ExecWB(7,1) type=button value=打印预览>   <input name=Button onClick=document.all.WebBrowser.ExecWB(8,1) type=button value=页面设置>   <input name=Button onClick=document.all.WebBrowser.ExecWB(10,1) type=button value=属性>   <input name=Button onClick=document.all.WebBrowser.ExecWB(17,1) type=button value=全选>   <input name=Button onClick=document.all.WebBrowser.ExecWB(22,1) type=button value=刷新>   <input name=Button onClick=document.all.WebBrowser.ExecWB(45,1) type=button value=关闭>   <OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT> <input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打开> <input name=Button onClick=document.all.WebBrowser.ExecWB(2,1) type=button value=关闭所有> <input name=Button onClick=document.all.WebBrowser.ExecWB(4,1) type=button value=另存为> <input name=Button onClick=document.all.WebBrowser.ExecWB(6,1) type=button value=打印> <input name=Button onClick=document.all.WebBrowser.ExecWB(6,6) type=button value=直接打印> <input name=Button onClick=document.all.WebBrowser.ExecWB(7,1) type=button value=打印预览> <input name=Button onClick=document.all.WebBrowser.ExecWB(8,1) type=button value=页面设置> <input name=Button onClick=document.all.WebBrowser.ExecWB(10,1) type=button value=属性> <input name=Button onClick=document.all.WebBrowser.ExecWB(17,1) type=button value=全选> <input name=Button onClick=document.all.WebBrowser.ExecWB(22,1) type=button value=刷新> <input name=Button onClick=document.all.WebBrowser.ExecWB(45,1) type=button value=关闭>

    三.使用ScriptX.cab控件 1.下载ScriptX.cab控件 官网http://www.meadroid.com/scriptx/index.asp 2.使用object元素,修改codebase,classid的值 这里调用控件ScriptX.cab

    Java代码 <OBJECT id="factory" style="DISPLAY: none" codeBase="${rootUrl}js/smsx.cab#VVersion=6,3,435,20"  classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>   <OBJECT id="factory" style="DISPLAY: none" codeBase="${rootUrl}js/smsx.cab#VVersion=6,3,435,20" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>

    这段代码用来加载cab文件,clsid和codebase必须要和你下载的cab中的信息对应,否则组件会加载错误,这两项其实不难找,只要你用winrar打开你下载的cab文件,然后找到扩展名是.inf的文件,然后打开之,就能看到了。 3.调用控件脚本 Print.js文件

    Java代码 function setPrintBase(headerText,footerText,rootUrl) {         // -- advanced features  ,未曾使用过,有待确认。             //factory.printing.SetMarginMeasure(2); // measure margins in inches             //factory.SetPageRange(false, 1, 3);// need pages from 1 to 3             //factory.printing.printer = "HP DeskJet 870C";             //factory.printing.copies = 2;             //factory.printing.collate = true;             //factory.printing.paperSize = "A4";             //factory.printing.paperSource = "Manual feed"         var header = (headerText==null||headerText=="")?'默认页眉':headerText;         var footer = (footerText==null||footerText=="")?'默认页角':footerText;       factory.printing.header = "&b"+header+"&b" ;       factory.printing.footer = "&b"+footer;       factory.printing.portrait = true;       factory.printing.leftMargin =10.00;       factory.printing.topMargin =10.00;       factory.printing.rightMargin =10.00;       factory.printing.bottomMargin =10.00;     }   function setPrintBase(headerText,footerText,rootUrl) { // -- advanced features  ,未曾使用过,有待确认。 //factory.printing.SetMarginMeasure(2); // measure margins in inches //factory.SetPageRange(false, 1, 3);// need pages from 1 to 3 //factory.printing.printer = "HP DeskJet 870C"; //factory.printing.copies = 2; //factory.printing.collate = true; //factory.printing.paperSize = "A4"; //factory.printing.paperSource = "Manual feed" var header = (headerText==null||headerText=="")?'默认页眉':headerText; var footer = (footerText==null||footerText=="")?'默认页角':footerText; factory.printing.header = "&b"+header+"&b" ; factory.printing.footer = "&b"+footer; factory.printing.portrait = true; factory.printing.leftMargin =10.00; factory.printing.topMargin =10.00; factory.printing.rightMargin =10.00; factory.printing.bottomMargin =10.00; }

    例子

    Java代码 <%@ page contentType="text/html;charset=GBK"%>     <html>   <head>   <meta http-equiv="imagetoolbar" content="no">   <script language="javascript" src="print.js"></script>   <style media="print">   .Noprint   {DISPLAY:   none;}   </style>   <title>打印测试</title>   </head>   <OBJECT id="factory" style="DISPLAY: none" codeBase="smsx.cab#VVersion=6,3,435,20"  classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT>     <script defer>   function window.onload() {      setPrintBase('页眉','页脚');   }   </script>   <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">   <center class="Noprint">    <input type=button value="打印" οnclick="factory.printing.Print(true)">    <input type=button value="页面设置" οnclick="factory.printing.PageSetup()">     <input type=button value="打印预览" οnclick="factory.printing.Preview()">              <input type="button" value="关闭" οnclick="window.close();">   </center>      <center>         <table width="100%" border="0" cellpadding="0" cellspacing="0">             <tr><td align="center"><b>内容</b></td></tr>          </table>       </center>   </body>   </html>   <%@ page contentType="text/html;charset=GBK"%> <html> <head> <meta http-equiv="imagetoolbar" content="no"> <script language="javascript" src="print.js"></script> <style media="print"> .Noprint {DISPLAY: none;} </style> <title>打印测试</title> </head> <OBJECT id="factory" style="DISPLAY: none" codeBase="smsx.cab#VVersion=6,3,435,20" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" viewastext></OBJECT> <script defer> function window.onload() { setPrintBase('页眉','页脚'); } </script> <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0"> <center class="Noprint"> <input type=button value="打印" οnclick="factory.printing.Print(true)"> <input type=button value="页面设置" οnclick="factory.printing.PageSetup()"> <input type=button value="打印预览" οnclick="factory.printing.Preview()"> <input type="button" value="关闭" οnclick="window.close();"> </center> <center> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr><td align="center"><b>内容</b></td></tr> </table> </center> </body> </html>

    四.对比 1.Window.print调用方便,但功能简单 2.功能更强大,但使用IEWebBrowser有时会报JS没有权限的错误。 3.ScriptX控件功能也比较强大,目前在使用这种方式。

     

     

     

     

     

    附上IE7对ActiveX控件的屏蔽解决方法

     

    ie7的安全级别比较高 即便加入安全站点默认规则也是不允许安装未签名的activex 需要在ie工具-internet选项--安全选项卡-- 相对用的组的规则里面把对应的改为启用或者提示

     

     

    <!--media=print 这个属性可以在打印时有效--> <style media=print> .Noprint{display:none;} .PageNext{page-break-after: always;} </style>


    最新回复(0)