最近遇到一个项目,需要用到较为复杂的打印功能,包括批量打印等。
目前来说,一般一个简单的详情页面打印,直接调用window.print就行了;
但遇到复杂的时候,我们可能会想到用集成好的控件来解决,当然,如果你有时间又不怕麻烦,你也可以自己写一堆js。

这里,我就先抛砖引玉对两个比较常用的打印控件谈谈自己的看法。

 

文中所述两个打印控件均为免费版本,收费版本另当别论。

一、jatoolsPrinter

    jatoolsPrinter号称真正的免费,不加水印,不限IP,兼容IE6+等等;

    下载地址:http://printfree.jatools.com/

 

    jatoolsPrinter的部署很简单,可以简单分为3个步骤:

    1.将控件引入到项目中

   

JAVA操控打印机 javaweb调用打印机_JavaScript

 

    2.编写打印js

function doPrint(how)  
    {  
        //打印文档对象.
        var myDoc ={ 
             documents: document,  
             // 在同一页面中,有多个可打印文档,他们可以用page_div_prefix属性来区别  
             // page_div_prefix前缀+page+页序号 构成可打印div的id,  
             // 如前缀为 'report1' ,则找到以 'report1page1'为id的div作为文档首页  
// 该属性,默认值为空  
             page_div_prefix: "report", 
copyrights: '杰创软件拥有版权  www.jatools.com'         };            
       // 调用打印方法  
       if(how == '打印预览...')  
           jatoolsPrinter.printPreview(myDoc );   // 打印预览         
       else if(how == '打印...')  
           jatoolsPrinter.print(myDoc ,true);   // 打印前弹出打印设置对话框         
       else   
           jatoolsPrinter.print(myDoc ,false);       // 不弹出对话框打印  
    }

 

    3.给需要打印的div取id名

如果page_div_prefix不为空,需要在id前面加上page_div_prefix对应的值

 

    杰表的优点就不说了,一大堆,这里说下最主要的两个缺失功能(当然,收费版应有尽有),

    第一,不支持自动缩放打印,就是说,如果你的页面高度或者宽度过大,那么,肯定不完全打印,多余的部门会被截掉

              解决的办法就是你只能把页面改小点来去兼容它;

    第二,不支持打印隐藏对象,这个真的挺头疼,如果遇到批量打印,而且打印的内容需要到后台去查询的,这个就不能用了,

              有个带点风险的解决办法,就是将你不显示出来的div设置z-index属性,放到显示内容的下面就行了。

 

二、LODOP

lodop同样免费,而且使用起来也很方便。

      下载地址:http://www.lodop.net/download.html

 

lodop的部署:

      1.引入lodop控件

</object>
              <embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0></embed>
      <object  id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0> 
      <script language="javascript" src="LodopFuncs.js"></script>
      <script language="javascript" src="LodopFuncs.js"></script>
      <object  id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0> 
      <script language="javascript" src="LodopFuncs.js"></script>
              <embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0></embed>
      <object  id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0> 
      <script language="javascript" src="LodopFuncs.js"></script>
      </object>
              <embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0></embed>
      <object  id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0> 
      <script language="javascript" src="LodopFuncs.js"></script>

 

      2.编写打印js

var LODOP; //声明为全局变量 
      function prn1_preview() { 
         CreateOneFormPage(); 
         LODOP.PREVIEW(); 
      };
      function prn1_print() {  
         CreateOneFormPage();
         LODOP.PRINT(); 
      };
      function prn1_printA() {  
         CreateOneFormPage();
         LODOP.PRINTA();  
      };      function CreateOneFormPage(){
         LODOP=getLodop(document.getElementById('LODOP_OB'),document.getElementById('LODOP_EM'));            LODOP.SET_PRINT_STYLE("FontSize",16);
          LODOP.SET_PRINT_STYLE("Bold",1);          var htm = str+"<body>"+document.getElementById("page1").innerHTML+"</body>";
          LODOP.ADD_PRINT_HTM("0%", "0%", "100%", "100%", htm);      }

      具体方法作用可以参考官网demo

 

      LODOP最主要的优点就是可以指定打印哪个模块,只要给他一个id就行,真的是很方便,比较明显的缺点有两个:

      第一,打印页面不能将原页面中css带过来,需要自己引入,具体方法见LODOP功能演示

本页由【试用版打印控件Lodop6.0.5.6】输出,这个让我无法接受,估计用户看到也会发疯,

                 咨询过LODOP作者,确定需要购买注册号才能去掉。

 

     总的说来,两个控件都很不错,虽然免费的功能不是很多,但一般的项目中应该也是够用了。