一、直接使用window.print()
<script> function print() { bdhtml=window.document.body.innerHTML; sprnstr="<!--startprint-->"; eprnstr="<!--endprint-->"; prnhtml=bdhtml.substr(bdhtml.indexOf(sprnstr)+17); //17为sprnstr的length prnhtml=prnhtml.substring(0,prnhtml.indexOf(eprnstr)); window.document.body.innerHTML=prnhtml; window.print(); location.reload(); } </script> <!--startprint--> <div>要打印的内容...</div> <!--endprint--> <input type="button" value="打印" onclick="print();" />
二、使用IE内置的浏览器控件WebBrowser(无需用户下载)
注:要在IE的"Internet选项——安全——自定义级别——把对没有标记为安全的ActiveX控件进行初始化和脚本运行,设置为启用"
<OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" id="WebBrowser1" width="0" height="0" VIEWASTEXT></OBJECT> <script> var HKEY_Root,HKEY_Path,HKEY_Key; HKEY_Root="HKEY_CURRENT_USER"; HKEY_Path="\\Software\\Microsoft\\Internet Explorer\\PageSetup\\"; var head,foot,top,bottom,left,right; //取得页面打印设置的原参数数据 function PageSetup_temp(){ try{ var Wsh=new ActiveXObject("WScript.Shell"); HKEY_Key="header"; //取得页眉默认 head = Wsh.RegRead(HKEY_Root+HKEY_Path+HKEY_Key); HKEY_Key="footer"; //取得页脚默认值 foot = Wsh.RegRead(HKEY_Root+HKEY_Path+HKEY_Key); HKEY_Key="margin_bottom"; //取得下页边距 bottom = Wsh.RegRead(HKEY_Root+HKEY_Path+HKEY_Key); HKEY_Key="margin_left"; //取得左页边距 left = Wsh.RegRead(HKEY_Root+HKEY_Path+HKEY_Key); HKEY_Key="margin_right"; //取得右页边距 right = Wsh.RegRead(HKEY_Root+HKEY_Path+HKEY_Key); HKEY_Key="margin_top"; //取得上页边距 top = Wsh.RegRead(HKEY_Root+HKEY_Path+HKEY_Key); Wsh = null; } catch(e){ //alert("不允许使用ActiveX控件!"); } } //设置网页打印的页眉页脚和页边距 function PageSetup_Null(){ try{ var Wsh=new ActiveXObject("WScript.Shell"); HKEY_Key="header"; //设置页眉(为空) Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,""); HKEY_Key="footer"; //设置页脚(为空) Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,""); HKEY_Key="margin_bottom"; //设置下页边距(0) Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"0"); HKEY_Key="margin_left"; //设置左页边距(0) Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"0"); HKEY_Key="margin_right"; //设置右页边距(0) Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"0"); HKEY_Key="margin_top"; //设置上页边距(8) Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,"0"); Wsh = null; } catch(e){ //alert("不允许使用ActiveX控件"); } } //设置网页打印的页眉页脚和页边距为默认值 function PageSetup_Default(){ try{ var Wsh=new ActiveXObject("WScript.Shell"); HKEY_Key="header"; //还原页眉 Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,head); HKEY_Key="footer"; //还原页脚 Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,foot); HKEY_Key="margin_bottom"; //还原下页边距 Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,bottom); HKEY_Key="margin_left"; //还原左页边距 Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,left); HKEY_Key="margin_right"; //还原右页边距 Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,right); HKEY_Key="margin_top"; //还原上页边距 Wsh.RegWrite(HKEY_Root+HKEY_Path+HKEY_Key,top); Wsh = null; } catch(e){ //alert("不允许使用ActiveX控件"); } } //使用顺序 function printorder(){ PageSetup_temp();//取得默认值 PageSetup_Null();//设置页面 WebBrowser1.execwb(6,6);//打印页面 PageSetup_Default();//还原页面设置 window.close(); } </script> <script> /* * 打印 */ function print(){ PageSetup_temp();//取得默认值 PageSetup_Null();//设置页面 WebBrowser1.ExecWB(6,1);//直接打印 PageSetup_Default();//还原页面设置 setTimeout("printClose()", 5000); //这里延时要长点,要先等打印后再关闭 } /* * 打印预览 */ function printPreview(){ PageSetup_temp();//取得默认值 PageSetup_Null();//设置页面 WebBrowser1.ExecWB(7, 1);//打印预览 PageSetup_Default();//还原页面设置 setTimeout("printClose()", 100); //没有延时不会自动关闭 } /* * 打印设置 */ function printSetting(){ WebBrowser1.ExecWB(8,1); } /* * 关闭打印页面 */ function printClose(){ WebBrowser1.ExecWB(45,1); //关闭窗体无提示 } </script> <!-- 我是将内容放在新页面中打印的 --> <body> <div>要打印的内容</div> <div> <input type="button" value="打印" onclick="print()" /> <input type="button" value="打印预览" onclick="printPreview()" /> <input type="button" value="打印设置" onclick="printSetting()" /> </div> </body>
关于这个组件还有其他的用法,列举如下:
WebBrowser.ExecWB(1,1); //打开 Web.ExecWB(2,1); //关闭现在所有的IE窗口,并打开一个新窗口 Web.ExecWB(4,1); //保存网页 Web.ExecWB(6,1); //打印 Web.ExecWB(7,1); //打印预览 Web.ExecWB(8,1); //打印页面设置 Web.ExecWB(10,1); //查看页面属性 Web.ExecWB(15,1); //好像是撤销,有待确认 Web.ExecWB(17,1); //全选 Web.ExecWB(22,1); //刷新 Web.ExecWB(45,1); //关闭窗体无提示
打印时会把整个页面都打印出来的,页面里面有什么东西就打印出来,我们有时候只需要打印数据表格,这时我们就要写一个样式了,把不想打印的部份隐藏起来:
<style type="text/css" media="print"> .noprint { display: none; } </style> <!-- 然后使用样式就可以 --> <p class="noprint">不需要打印的地方</p>
转载:http://tiwson.iteye.com/blog/617976
http://www.cnblogs.com/samlin/archive/2008/04/13/1151265.html