JS实现打印的方式

方式一:window.print()

方式二:使用html 标签<object>引入Webbrowser控件这种方式是其只兼容IE,其他浏览器不可使用,同时IE10以下的浏览器才可以使用,调用方式如下:

<body>

  <object id="WebBrowser"  classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0"  width="0"> </object>

</body>

<script>

  WebBrowser.ExecWB(1,1) //打开 

  WebBrowser.ExecWB(2,1) //关闭现在所有的IE窗口,并打开一个新窗口 

  WebBrowser.ExecWB(4,1) //保存网页

  //--------------- 常用 ---------------  

  WebBrowser.ExecWB(6,1) //打印 

  WebBrowser.ExecWB(7,1) //打印预览 

  WebBrowser.ExecWB(8,1) //打印页面设置 

  //------------------------------------- 

  WebBrowser.ExecWB(10,1) //查看页面属性 

  WebBrowser.ExecWB(15,1) //撤销 

  WebBrowser.ExecWB(17,1) //全选 

  WebBrowser.ExecWB(22,1) //刷新 

  WebBrowser.ExecWB(45,1) //关闭窗体无提示

</script>

方式三:采用document.execCommand(”print”)

该方式也兼容各个版本的浏览器,同window.print()一样,其启动的是打印对话框,chrome的打印对话框自带预览功能,但是IE、火狐仅仅只弹出打印设置对话框,没有预览功能。

方式四:采用JQuery插件

使用jQuery浏览插件可以很方便的进行局部打印,常用的插件有:

1)jquery.print.js 下载地址:https://github.com/DoersGuild/jQuery.print

2)jquery.print-preview.js 下载地址:https://github.com/etimbo/jquery-print-preview-plugin

这两种方式使用都很简单,1)通过$("#id").print(/options/);调用;2)通过$('#id').printArea(/options/); 其中的option可选项可以在下载地址下载下来后看示例代码,一般options不用传即可

方式五:采用浏览器打印第三方插件 比如Lodop插件

比如Lodop插件,这个挺好用,套打,局部打印都杠杠的,不过是收费的,免费的含有水印,比较蛋疼。

window.print()方法打印,所有主要浏览器都支持 print() 方法。

想要局部打印,通过jQuery插件就可以实现,现在网上有很多这样的插件,比如jqprint插件等等。也可以通过一个打印前和打印后的事件onbeforeprint、onafterprint。可以在打印前的时候重新编辑一些格式,专门送去打印,打印后又处理回来。

function window.onbeforeprint()

    { //将一些不需要打印的隐藏 }

    function window.onafterprint()

    { //放开隐藏的元素 }

则可以用数据嵌套在 一个 div 里,获得 div

var printData = document.getElementById("dvData").innerHTML;

获得 div 里的所有 html 数据

window.document.body.innerHTML = printData;

//把 html 里的数据 复制给 body 的 html 数据 ,相当于重置了 整个页面的 内容

window.print(); // 开始打印

调用window.print()时,可以利用css来控制页面中的东西是否显示

1.  <style>  
2.  @media print{  
3.  .noprint{  
4.  display:none  
5.  }  
6.  }  
7.  </style>

HTML如下:

1.  <table width="757" height="174" border="0" align="center" cellpadding="0" cellspacing="0">  
2.  <tr class="noprint">  
3.  <td height="133" align="center" valign="top">  
4.  <img src="Images/top.jpg" width="757" height="133"></td>  
5.  </tr>  
6.  </table>

使用打印分页css,相当于分页符,总是在此div后分页

1.  <span style="font-family:KaiTi_GB2312;font-size:18px;"><div style="page-break-after:always"></div></span>

ps:关于page-break-after的使用:http://www.w3school.com.cn/cssref/pr_print_page-break-after.asp 需要特别注意的是它应用于:position 值为 relative 或 static 的非浮动块级元素。当时absolute的时候是不起作用的。

2.将界面分为两个div,一个div中用于进行界面展示,另一个div进行打印填充,两个div

一个为界面展示时的样式,另一个为打印时的样式,单击打印时页面div隐藏,对另外一个div进行填充,打印方法执行完成后,页面div显示,另一个div隐藏。

用法:

1,点打印按钮弹出新窗口,把需要打印的内容显示到新窗口中,在新窗口中调用window.print()方法,然后自动关闭新窗口。如果要打印的页面排版和原web页面相差很大,采用此种方法。

1.  <!DOCTYPE html>  
2.  <html>  
3.  <head>  
4.  <meta charset="utf-8">  
5.  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">  
6.  <title>打印测完</title>  
7.  <meta name="description" content="">  
8.  <meta name="keywords" content="">  
9.  <link href="" rel="stylesheet">  
10.  <style>  
11.  #oDiv2 div{width: 100px;height: 100px;border:1px solid #c50000;}  
12.  </style>  
13.  </head>  
14.  <body>  
15.  <div>aaa</div>  
16.  <div id='oDiv2'><div>bbb</div></div>  
17.  <div>ccc</div>  
18.  <input type="button" value="打印" id="js_print" />  

20.  <script>  

22.  var oPrintBtn = document.getElementById("js_print");  
23.  var oDiv2 = document.getElementById("oDiv2");  
24.  oPrintBtn.onclick=function(){  
25.  var oPop = window.open('','oPop');  
26.  var str = '<!DOCTYPE html>'  
27.  str +='<html>'  
28.  str +='<head>'  
29.  str +='<meta charset="utf-8">'  
30.  str +='<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">'  
31.  str+='<style>';  
32.  str+='#oDiv2 div{width: 100px;height: 100px;border:1px solid #c50000;}';  
33.  str+='</style>';  
34.  str +='</head>'  
35.  str +='<body>'  
36.  str +="<div id='oDiv2'><div>bbb</div></div>";  
37.  str +='</body>'  
38.  str +='</html>'  

40.  oPop.document.write(str);  
41.  oPop.print();  
42.  oPop.close();  
43.  }  

45.  </script>  
46.  </body>  
47.  </html>

2.打印第三放页面不用打开该页面

<!doctype html>  <html>  
<head>  <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8"  />  <title>MDN Example</title> 
 <script type="text/javascript">  
function closePrint ()  { 
document.body.removeChild(this.__container__); 
 }  
function setPrint ()  { 
 this.contentWindow.__container__ =  this;  
this.contentWindow.onbeforeunload = closePrint;
  this.contentWindow.onafterprint = closePrint;
  this.contentWindow.focus();  // Required for IE  this.contentWindow.print();
  } 

 function printPage (sURL)  {
  var oHiddFrame = document.createElement("iframe");
 oHiddFrame.onload = setPrint; oHiddFrame.style.visibility =  "hidden"; oHiddFrame.style.position =  "fixed"; oHiddFrame.style.right =  "0"; oHiddFrame.style.bottom =  "0";
 oHiddFrame.src = sURL; 
document.body.appendChild(oHiddFrame);  }  
</script>  
</head> 
 <body>  
<p><span onclick="printPage('externalPage.html');" style="cursor:pointer;text-decoration:underline;color:#0000ff;">Print external page!</span></p> 
 </body>  </html>

3,打开一个弹窗用于打印页面,打印完毕后自动关闭窗口

<!doctype html>  <html> 
 <head>  <meta http-equiv="Content-Type"  content="text/html; charset=UTF-8"  />  <title>JavaScript Window Close Example </title> 
 <script type="text/javascript"> 
 function  popuponclick()  { 
my_window = window.open('',  'mywindow',  'status=1,width=350,height=150'); my_window.document.write('<html><head><title>Print Me</title></head>'); my_window.document.write('<body onafterprint="self.close()">'); my_window.document.write('<p>When you print this window, it will close afterward.</p>'); 
my_window.document.write('</body></html>');  }  
</script>  
</head>  
<body>  <p>To try out the <code>afterprint</code> event, click the link below to open the window to print. You can also try changing the code to use <code>beforeprint</code> to see the difference.</p>
  <p><a href="javascript: popuponclick()">Open Popup Window</a></p> 
 </body>  
</html>

4.window.print()直接打印,不弹出设置打印参数的对话框

现在有两种解决方案,

(1).第一种是需要安装插件,网上下载ScriptX.cab文件

下载成功后将文件放在项目某个目录下,然后在页面body中写上:

<object id="factory" name="factory" style="display: none" classid="clsid:1663ed61-23eb-11d2-b92f-008048fdd814" codebase="ScriptX.cab" viewastext></object>(记得codebase属性为ScriptX.cab文件的放置路径,是绝对路径)

把window.print()改成:factory.printing.Print(false)即可;

远程访问时需要在IE浏览器设置:

1.安全 -> 受信任的站点 -> 站点 -> 添加受信任访问站点(如果是访问远程那么是对方IP地址,例如http://192.168.172.1)

(2).第二种是无需要安装插件

首先需要在页面body中写上:

<OBJECT ID='WebBrowser' NAME="WebBrowser" WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></OBJECT>

把window.print()改成:document.getElementById("WebBrowser").ExecWB(6,2)即可;

最后记住一定需要在IE浏览器设置:

1.安全 -> 本地Intranet -> 自定义级别 - 找到ActiveX控件和插件项,选择对未标记为可安全执行的ActiveX控件初始化并执行脚本,再选择启用

2.安全 -> 受信任的站点 -> 自定义级别 - 找到ActiveX控件和插件项,选择对未标记为可安全执行的ActiveX控件初始化并执行脚本,再选择启用

3.安全 -> 受信任的站点 -> 站点 -> 添加受信任访问站点(如果是访问远程那么是对方IP地址,如果是本地则是本机IP.例如http://192.168.172.1))