• 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

  • 相关阅读:
    Redis 连接
    Redis 脚本
    Redis 事务
    Redis 发布订阅
    redis 字符串数据(string)
    Redis 键(key)
    Redis 命令
    Redis的五种数据类型
    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案
    在命令行中运行eclipse中创建的java项目
  • 原文地址:https://www.cnblogs.com/charles-kun/p/5526871.html
Copyright © 2020-2023  润新知