zoukankan      html  css  js  c++  java
  • Lodop实现打印功能

    LodopFuncs.js:

    var CreatedOKLodop7766=null;
    
    function getLodop(oOBJECT,oEMBED){
    /**************************
      本函数根据浏览器类型决定采用哪个页面元素作为Lodop对象:
      IE系列、IE内核系列的浏览器采用oOBJECT,
      其它浏览器(Firefox系列、Chrome系列、Opera系列、Safari系列等)采用oEMBED,
      如果页面没有相关对象元素,则新建一个或使用上次那个,避免重复生成。
      64位浏览器指向64位的安装程序install_lodop64.exe。
    **************************/
            var strHtmInstall="<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='/install_lodop32.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
            var strHtmUpdate="<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='/install_lodop32.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
            var strHtm64_Install="<br><font color='#FF00FF'>打印控件未安装!点击这里<a href='/install_lodop64.exe' target='_self'>执行安装</a>,安装后请刷新页面或重新进入。</font>";
            var strHtm64_Update="<br><font color='#FF00FF'>打印控件需要升级!点击这里<a href='/install_lodop64.exe' target='_self'>执行升级</a>,升级后请重新进入。</font>";
            var strHtmFireFox="<br><br><font color='#FF00FF'>(注意:如曾安装过Lodop旧版附件npActiveXPLugin,请在【工具】->【附加组件】->【扩展】中先卸它)</font>";
            var strHtmChrome="<br><br><font color='#FF00FF'>(如果此前正常,仅因浏览器升级或重安装而出问题,需重新执行以上安装)</font>";
            var LODOP;        
        try{    
             //=====判断浏览器类型:===============
             var isIE     = (navigator.userAgent.indexOf('MSIE')>=0) || (navigator.userAgent.indexOf('Trident')>=0);
             var is64IE  = isIE && (navigator.userAgent.indexOf('x64')>=0);
             //=====如果页面有Lodop就直接使用,没有则新建:==========
             if (oOBJECT!=undefined || oEMBED!=undefined) { 
                        if (isIE) 
                     LODOP=oOBJECT; 
                 else 
                     LODOP=oEMBED;
             } else { 
             if (CreatedOKLodop7766==null){
                       LODOP=document.createElement("object"); 
                 LODOP.setAttribute("width",0); 
                         LODOP.setAttribute("height",0); 
                 LODOP.setAttribute("style","position:absolute;left:0px;top:-100px;0px;height:0px;");               
                         if (isIE) LODOP.setAttribute("classid","clsid:2105C259-1E0C-4534-8141-A753534CB4CA"); 
                 else LODOP.setAttribute("type","application/x-print-lodop");
                 document.documentElement.appendChild(LODOP); 
                     CreatedOKLodop7766=LODOP;             
                  } else 
                         LODOP=CreatedOKLodop7766;
             };
             //=====判断Lodop插件是否安装过,没有安装或版本过低就提示下载安装:==========
             if ((LODOP==null)||(typeof(LODOP.VERSION)=="undefined")) {
                     if (navigator.userAgent.indexOf('Chrome')>=0)
                         document.documentElement.innerHTML=strHtmChrome+document.documentElement.innerHTML;
                     if (navigator.userAgent.indexOf('Firefox')>=0)
                         document.documentElement.innerHTML=strHtmFireFox+document.documentElement.innerHTML;
                     if (is64IE) document.write(strHtm64_Install); else
                     if (isIE)   document.write(strHtmInstall);    else
                         document.documentElement.innerHTML=strHtmInstall+document.documentElement.innerHTML;
                     return LODOP;
             } else 
             if (LODOP.VERSION<"6.1.9.8") {
                     if (is64IE) document.write(strHtm64_Update); else
                     if (isIE) document.write(strHtmUpdate); else
                     document.documentElement.innerHTML=strHtmUpdate+document.documentElement.innerHTML;
                     return LODOP;
             };
             //=====如下空白位置适合调用统一功能(如注册码、语言选择等):====         
             LODOP.SET_LICENSES("","","","");
    
             //============================================================         
             return LODOP; 
        } catch(err) {
             if (is64IE)    
                document.documentElement.innerHTML="Error:"+strHtm64_Install+document.documentElement.innerHTML;else
                document.documentElement.innerHTML="Error:"+strHtmInstall+document.documentElement.innerHTML;
             return LODOP; 
        };
    }

    second.js:

    function printContent(ttl,type,defaW,w){
        var htmlStr="<!DOCTYPE html>"+document.getElementsByTagName("html")[0].innerHTML+"</html>";
        
        LODOP=getLodop();
        LODOP.PRINT_INIT(ttl);
    //top left width height,根据height分页
        //LODOP.ADD_PRINT_URL(0,0,600,"98%",url);//[url需要登录,ADD_PRINT_URL没法登录]
        if(w){
            LODOP.ADD_PRINT_HTM(0,0,w,"100%",htmlStr);
            LODOP.SET_PRINT_STYLEA(0,"Horient",2);
        }else{
            if(defaW=='FIXED'){
                LODOP.ADD_PRINT_HTM(0,0,680,"100%",htmlStr);
                LODOP.SET_PRINT_STYLEA(0,"Horient",2);
            }else{//ALL
                LODOP.ADD_PRINT_HTM(0,0,"100%","100%",htmlStr);
            }
        }
        
        if(type=='PRINT'){
            LODOP.SET_SHOW_MODE("NP_NO_RESULT",true);//lodop6.198以后才有效
            LODOP.PRINT();
        }else if(type=='SELECT'){
            if(LODOP.SELECT_PRINTER()>=0){
                LODOP.SET_SHOW_MODE("NP_NO_RESULT",true);
                LODOP.PRINT();
            }
        }else if(type=='PREVIEW'){
            LODOP.SET_SHOW_MODE("NP_NO_RESULT",true);
            LODOP.PREVIEW();
        }
    }
    
    function iePrint(ieObjId,type){
        var HKEY_Root = "HKEY_CURRENT_USER"
        var HKEY_Path = "\software\Microsoft\Internet Explorer\PageSetup\";
        var head,foot,top,bottom,left,right;
        try{
            var Wsh=new ActiveXObject("WScript.Shell");
            //取得默认值
            /**
            head = Wsh.RegRead(HKEY_Root+HKEY_Path+"header");//页眉
            foot = Wsh.RegRead(HKEY_Root+HKEY_Path+"footer");//页脚
            bottom = Wsh.RegRead(HKEY_Root+HKEY_Path+"margin_bottom");//下页边距
            left = Wsh.RegRead(HKEY_Root+HKEY_Path+"margin_left");//左页边距
            right = Wsh.RegRead(HKEY_Root+HKEY_Path+"margin_right");//右页边距
            top = Wsh.RegRead(HKEY_Root+HKEY_Path+"margin_top");//上页边距
            **/
            //设置
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"header","");
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"footer","");
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"margin_bottom","0.1");
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"margin_left","0.1");
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"margin_right","0.1");
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"margin_top","0.1");
        }catch(oe){
            //alert("设置页眉页脚及打印边距失败,请注册WScript.Shell并将浏览器安全级别设置为低,或者在浏览器的打印->页面设置中手工设置。");
        }
        
        var ieObj=document.getElementById(ieObjId);
        if(type=='PRINT'){
            ieObj.execwb(6,1);
        }else if(type=='SELECT'){
            ieObj.execwb(6,6);
        }else if(type=='PREVIEW'){
            ieObj.execwb(7,1);
        }
        /**打印有延迟,还原设置会造成前面的设置实效,先不还原
        try{
            var Wsh=new ActiveXObject("WScript.Shell");
            //还原
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"header",head);
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"footer",foot);
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"margin_bottom",bottom);
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"margin_left",left);
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"margin_right",right);
            Wsh.RegWrite(HKEY_Root+HKEY_Path+"margin_top",top);
        }catch(oe){
            //alert(oe);
        }
        **/
    }

    实现页面(主要代码):

    <script language="javascript">

    printContent("title","PRINT","FIXED");//PRINT:直接打印 SELECT:选择打印机 PREVIEW:打印预览。FIXED:固定 ALL:100%。

    </script>

    打印数量比较多的情况,可以这样:

    var len=${fn:length(list)};
    var isIE = (navigator.userAgent.indexOf('MSIE')>=0) || (navigator.userAgent.indexOf('Trident')>=0);
                            if(len>200 && isIE){
                                  iePrint("wb","PRINT"); 
                    }
    else{ printContent("title","PRINT","FIXED"); }
    此处的list用来判断数量,如从控制器拿到的list:
    <c:forEach var="item" items="${list}" varStatus="s">.....</c:forEach>!!结束!!
    页面中,还需插入下面一个标签,方便调用ActiveX控件。
    <OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2" height=0
           id= wb width =0 id=wb name=wb ></OBJECT>
     
    注:此处的classid是ie打印的类id。
      <object>元素可以在页面中嵌入ActiveX控件.我们只需把ActiveX控件的classID插入到classid特性中就可以了。

    注意要先到官网上下载:install_lodop32.exe和install_lodop64.exe。

    这里的做了second.js的修改。可以不用这个js。

      下面是个简单的预览打印页面:

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <title>print</title>
     5     <script src="./web/js/LodopFuncs.js"></script>
     6 <script type="text/javascript" language="javascript">
     7     function init(){
     8     var LODOP=getLodop(document.getElementById('LODOP_OB'),document.getElementById('LODOP_EM'));  
     9     LODOP.PREVIEW();
    10 }
    11 </script>
    12 <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0> 
    13 <embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0 pluginspage="install_lodop.exe"></embed>
    14 </object>
    15 </head>
    16 <body onload="init();">
    17 </body>
    18 </html>

    参考官网:http://www.mtsoftware.cn/demo.html

  • 相关阅读:
    bzoj 1017 魔兽地图DotR
    poj 1322 chocolate
    bzoj 1045 糖果传递
    poj 3067 japan
    timus 1109 Conference(二分图匹配)
    URAL 1205 By the Underground or by Foot?(SPFA)
    URAL 1242 Werewolf(DFS)
    timus 1033 Labyrinth(BFS)
    URAL 1208 Legendary Teams Contest(DFS)
    URAL 1930 Ivan's Car(BFS)
  • 原文地址:https://www.cnblogs.com/charles-kun/p/5526871.html
Copyright © 2011-2022 走看看