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;width: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM