| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053 | /** * 2021-03-02 增加无外观签名 * 2021-05-26 增加在线打开URL文件 * */var NetcaUtils = (function(){    'use strict';    var that = {};    /**判断当前是否手动盖章界面*/    that.isUserManualSignUI = function () {        if ($('.netcasignpdf').length) {            return true;        }        return false;    };    /**转换成pdf.js能直接解析的Uint8Array类型*/    that.convertDataURIToBinary = function(dataURI){        var raw = window.atob(dataURI);        var rawLength = raw.length;        var array = new Uint8Array(new ArrayBuffer(rawLength));        for (var i = 0; i < rawLength; i++) {            array[i] = raw.charCodeAt(i) & 0xff;        }        return array;    };    /**Uint8Array转为base64*/    that.arrayBufferToBase64 =function(buffer) {        var binary = '';        var bytes = new Uint8Array(buffer);        for (var len = bytes.byteLength, i = 0; i < len; i++) {            binary += String.fromCharCode(bytes[i]);        }        return window.btoa(binary);    };    return that;})();var NetcaSignAPI = (function(){    'use strict';    var that = {        VerifyInfos: null //验证信息    };    var isOnlineverifyrevoke = null;    var click_x = null;    var click_y = null;    var sealImage_halfWidth = null;    var sealImage_halfheight = null;    var sealImageSrc = null;    var certEncode = null;    var originImage_width = null;    var originImage_height = null;    var tagObj = {        width: '', //签章图片宽度        height: '' //签章图片高度    };    var timeStamp = {        tsaUrl: '', //时间戳地址        tsaUsr: '', //时间戳服务对应用户名        tsaPwd: '',//时间戳服务对应用户的密码        tsaHashAlgo: ''    };    var revInfoIncludeFlag = null; //是否包含吊销信息    var isVerifyRevoke = null;//是否获取吊销信息    var verifyLevel = null; //验证级别    var signFields = []; //签名域信息    var isDisplayVerifyTips = null;    var isVerifyOpen = false; //初次进入页面,是否开启在线自动验证文档有效性    var isVerifyOpenWithOpenBtn = null; //使用打开按钮时,是否开启在线自动验证文档有效性    var filedFlag = false; //判断是否为刚签完的章    var zoom = false; //缩放    var completedStreamId; //已签数据流信息    var unfinishedStreamId; //未完成数据流信息    var bigFileSize = 20; //大文件    var writeLength = 10; //写入文件大小    that.initUI = function(){        if(NetcaUtils.isUserManualSignUI()) {            // 签章绑定事件            that.bindSignFn('netcasign');            that.bindSignFn('connect');            that.bindSignFn('batchsign');            that.bindSignFn('pagingsign');            // 显示签章菜单背景色            that.transBackground('netcasign');            that.transBackground('batchsign');            that.transBackground('pagingsign');            // toorbar 签章按钮            $('#sign').click(function(){                if($('.netcasignmenu').css('display') === 'none') {                    $('.netcasignmenu').css('display','block');                } else if($('.netcasignmenu').css('display') === 'block') {                    $('.netcasignmenu').css('display','none');                }            });            /// 签章菜单  hover            for(var k=0; k<$('.netcasignmemuitem').length;k++) {                (function(k){                    $('.netcasignmemuitem').eq(k).hover(function(){                        $(this).children('ul').css('display','block');                        $(this).css('background','#DBECFF');                    },function(){                        $(this).children('ul').css('display','none');                        $(this).css('background','#fff');                    });                })(k)            }            /**选中option,缩放pdf*/            that.zoomPDFBySelectOptionScale();            //绑定事件            document.getElementById('verify').addEventListener('click',function(){                that.isLoading();                isDisplayVerifyTips = true;                if(that.isBigFile(NetcaPDFSeal.SetPDFBytes)){                    that.signedDataVerify('','',verifyLevel,isOnlineverifyrevoke, unfinishedStreamId)                } else {                    that.signedDataVerify('',NetcaPDFSeal.SetPDFBytes,verifyLevel,isOnlineverifyrevoke)                }            });            document.getElementById('print').addEventListener('click',that.printPDF);            document.getElementById('netcainvalidClose').addEventListener('click', function(){that.closeSignedDataVerifyInfo('netcainvalidClose')});            document.getElementById('netcaclose2').addEventListener('click', function(){that.closeSignedDataVerifyInfo('netcaclose2')});            document.getElementById('netcainvalidBtn').addEventListener('click', that.displaySignedDataVerifyInfo);            document.getElementById('zoomIn').addEventListener('click', that.zoomPDF);            document.getElementById('zoomOut').addEventListener('click', that.zoomPDF);            document.getElementById('closeFile').addEventListener('click', that.closeFile);            // 控件显示            $('#netcasignpdf').css('display','block');            $('#NetcaReaderAx').css('display','none');            //打开按钮            $('#openFile input[type="file"]').on('change', function(ev){                var file = ev.target.files[0];                that.openFile(file);            });        }    };    // 缩放PDF    that.zoomPDF = function(){        zoom = true;        that.getSignatureFieldInfo(NetcaPDFSeal.SetPDFBytes, unfinishedStreamId);    };    /**获取证书列表*/    that.getCertList = function(e){        if($('.netcasignmenu').css('display') === 'block'){            $('.netcasignmenu').css('display','none');        }        var clickTargetId = e.target.parentNode.parentNode.getAttribute('id'); //员工 机构 法人        var clickTargetClass = e.target.getAttribute('class'); //普通  批量 骑缝章 切换用户        // 签章0 批量签章1 骑缝章2 切换用户3   普通签章0 员工签章1 机构签章2 法人签章3        var signObj = that.signFn(clickTargetId, clickTargetClass);        var index = that.isLoading();        if(clickTargetId){            // 粤商通            that.selectSealSigntureInfoWithDispaly(signObj, index);        } else {            // 标准版            that.isInsertKey(signObj, index);        }    };    that.signFn = function(targetId, targetClass) {        var _type , _key;        switch(targetId) {            // 员工签章            case 'netcastaff':                _type = 1;                break;            // 机构签章            case 'netcaorganization':                _type = 2;                break;            // 法人签章            case 'netcalegalperson':                _type = 3;                break;            // 普通签章            default:                _type = 0;                break;        }        switch(targetClass) {            // 签章            case 'netcasign':                _key = 0;                break;            // 批量签章            case 'batchsign':                _key = 1;                break;            // 骑缝章            case 'pagingsign':                _key = 2;                break;            // 切换用户            case 'connect':                _key = 3;                break;        }        if(_key === 0 || _key === 3){            // 普通签章            return {                signMenu: _type,                signType:_key,                batchSignParams: null,                acrosspageSignParams:null            }        } else{            // 批量签章  骑缝章            return {                signMenu: _type,                signType:_key,                batchSignParams: {  // 批量签章参数                    startPageNum: 1,//开始页码                    endPageNum: globalPDFViewerApplication.pagesCount//结束页码,-1表示最后一页                },                acrosspageSignParams:{ // 骑缝章参数                    startPageNum: 1,//开始页码                    endPageNum: globalPDFViewerApplication.pagesCount//结束页码,-1表示最后一页                }            }        }    };    // 绑定签章按钮初始化功能事件    that.bindSignFn = function(name){        var eleName = document.getElementsByClassName(name);        for(var i=0;i<eleName.length;i++){            (function(i){                document.getElementsByClassName(name)[i].addEventListener('click', that.getCertList);            }(i))        }    };    // 点击 签章 按钮,普通签章,先判断是否插入key    that.isInsertKey = function(signObj, index) {        var params = {};        NetcaPKI.isInsertKey(params)            .Then(function (res) {                if (res.insertCount > 0) {                    that.InsertCallBack(signObj, index);                }                else {                    that.UnInsertCallBack(res, index);                }            })            .Catch(function (res) {                that.UnInsertCallBack(res, index);            });    };    that.InsertCallBack = function(signObj, index) {        that.selectSealSigntureInfoWithDispaly(signObj, index)    };    that.UnInsertCallBack = function(res, index) {        layer.close(index);        if(!res.insertCount){            alert('找不到签名证书,请检查设备是否连接正确')        }    };    // 点击签章按钮,弹出证书选择框    that.selectSealSigntureInfoWithDispaly = function(signObj, index){        var params = {            signMenu: signObj.signMenu,            signType: signObj.signType,            batchSignParams: signObj.batchSignParams,            acrosspageSignParams: signObj.acrosspageSignParams        };        NetcaPKI.SelectSealSigntureInfoWithDispaly(params)            .Then(function(res) {                NetcaSignAPI.selectSealSigntureInfoWithDispalySuccessCallBack(res, signObj,index);            })            .Catch(function(res) {                NetcaSignAPI.selectSealSigntureInfoWithDispalyFailCallBack(res, index)            });    };    that.selectSealSigntureInfoWithDispalySuccessCallBack = function(res, signObj,index) {        certEncode = res.cert; //证书编码        tagObj.width = res.width; //印章宽度        tagObj.height = res.height; //印章高度        sealImageSrc = res.picture; //印章编码        if(signObj.acrosspageSignParams || signObj.batchSignParams){            signObj.acrosspageSignParams.startPageNum = res.acrosspageSignParams.startPageNum;            signObj.acrosspageSignParams.endPageNum = res.acrosspageSignParams.endPageNum;            signObj.batchSignParams.startPageNum = res.batchSignParams.startPageNum;            signObj.batchSignParams.endPageNum = res.batchSignParams.endPageNum;        }        // 无外观签名        if(res.type === 2){            that.seal_SignSealPosition(-1, res.type);            return;        }        that.setSignImageSize();        that.signImageMoveEvent(signObj, res.type);        layer.close(index);    };    that.selectSealSigntureInfoWithDispalyFailCallBack = function(res, index) {        layer.close(index);        alert(res.msg);    };    /**     设置跟随鼠标移动的图片大小     图像的像素宽度为 originImage_width,水平分辨率为 72 点/英寸     如果调用此方法在分辨率为 96 点/英寸的设备上绘制该图像,则所呈现图像的像素宽度就是: (originImage_width/72)*96     * */    that.setSignImageSize = function(){        var val = that.getScale();//缩放比例        var scale = 0.75;//当前缩放比例        $('#NetcaSignMoveImage').width(tagObj.width);        $('#NetcaSignMoveImage').height(tagObj.height);        $('#NetcaSignMoveImage').attr('src',"data:image/PNG;base64," + sealImageSrc);        originImage_width = $('#NetcaSignMoveImage').width();        var w = (originImage_width * val)/ scale;        $('.NetcaSignMoveDiv').width(w);        originImage_height = $('#NetcaSignMoveImage').height();        var h = (originImage_height * val)/ scale;        $('.NetcaSignMoveDiv').height(h);        $('#NetcaSignMoveImage').css({            'width':'100%',            'height':'100%'        });        sealImage_halfWidth = parseInt($('.NetcaSignMoveDiv').width()) / 2;        sealImage_halfheight = parseInt($('.NetcaSignMoveDiv').height()) / 2;    };    /**鼠标移动签章图片事件 mousemove*/    that.signImageMoveEvent = function(signObj, type){        $(document).mousemove(function(event){            var ev = event || window.event;            /**position left和top 设置鼠标位于图片中央*/            $('.NetcaSignMoveDiv').css({                'display':'block',                'left':ev.clientX - sealImage_halfWidth + 'px',                'top':ev.clientY - sealImage_halfheight +'px'            })        });        $(document).mousedown(function(){            that.netcaPDFClickEvent(signObj, type)        });        $(document).mouseup(function(){            $(document).unbind('mousedown');            $(document).unbind('mousemove');        });        /**点击右键  取消签章*/        $(document).bind('contextmenu', function(){            that.hideSignImage();            $('#viewer').unbind('click');            return false;        });    };    // 打开文件    that.openPDF = function(base64Val) {        if(that.isBigFile(base64Val)){            // 重新打开时  删除旧的streamId,保存新的streamId            if(unfinishedStreamId){                that.destoryStreamCallBack(unfinishedStreamId)            }            unfinishedStreamId = completedStreamId;        } else {            unfinishedStreamId = null;            completedStreamId = null;        }        // 渲染入口        var Bytes = NetcaUtils.convertDataURIToBinary(base64Val);        globalPDFViewerApplication.open(Bytes);    };    that.isLoading = function() {        var loading = layer.load(1, {            shade: [0.1,'#000'] //0.1透明度的白色背景        });        return loading    };    // 打开按钮    that.openFile = function(file){        isVerifyOpen = isVerifyOpenWithOpenBtn;//打开按钮,文档加载时是否自动验证文档有效性        that.isLoading();        var reader = new FileReader();        reader.readAsDataURL(file);        reader.onload = function (){            var result = reader.result.split(',')[1];            NetcaPDFSeal.setPDFBytes(result);            that.openPDF(result);            if(that.isBigFile(result)){                var params = {srcBytes: result};                that.createStreamCallBack(params);            } else {                that.getSignatureFieldInfo(NetcaPDFSeal.SetPDFBytes);//小文件            }        };        // 验证提示隐藏        $('#netcasignedDataVerify').css('display', 'none');        $('#netcaDisplaySignedDataVerify').css('display', 'none');        $('#viewerContainer').css('margin-top', '0');    };    //高度累加,计算纵坐标    that.addHeight = function(n){        var result = 0;        while(n >= 2) {           var _height = $('#viewer .page').eq(n-2).height() + 11;           result += _height;           n--;        }        return result;    };    // viewer点击事件    that.netcaPDFClickEvent = function(signObj, type){        var pdfviewer = document.getElementById('netcasignpdf');        var pdfviewerL = pdfviewer.offsetLeft;        var pdfviewerT = pdfviewer.offsetTop;        var flag = 2;        var pageNum = globalPDFViewerApplication.page;//当前页码        // 前n-1页 高度        var _height = 0;        if(pageNum > 1){            _height = that.addHeight(pageNum);        }        $('#viewer').click(function(e){            flag--;            /**鼠标点击的位置,相对于文档的左边缘/上边缘*/            var client_x = e.clientX;            var client_y = e.clientY;            var viewer_width = $('#viewer').width();            var blank_top = $('#toolbarViewer').height() + 9;            var pdfscrollTop = $('#viewerContainer').scrollTop(); //文档滚动高度            //验证提示信息的高度            if($('#netcasignedDataVerify').css('display') === 'block'){                blank_top = blank_top + $('#netcasignedDataVerify').outerHeight();            }            var clicky_temp = client_y - blank_top + pdfscrollTop - pdfviewerT;            click_y = clicky_temp - _height;            var page_width = $('#viewer .page').eq(pageNum-1).width();            var blank_left = (viewer_width - page_width) / 2;            var clickx_temp =  client_x - pdfviewerL;            click_x = clickx_temp - blank_left;            //假如显示第1页,签第2页的位置            var currentPageHeight = that.addHeight(pageNum + 1);            if(currentPageHeight < clicky_temp){                pageNum = pageNum + 1;                that.calculateCurrentHeightAgain(pageNum, clickx_temp, clicky_temp, viewer_width);            }            // 假如显示第2页,签第1页页尾位置            if(click_y<0){                //计算负数  重算高度  宽度                pageNum = pageNum -1;                that.calculateCurrentHeightAgain(pageNum, clickx_temp, clicky_temp, viewer_width);            }            if(flag>0){                /**每次点击只触发一次签章 超出文档左右界线不能点击签章*/                if(click_x>0 && (viewer_width - click_x - blank_left) >= blank_left){                    that.isLoading();                    if(signObj.signType === 1 || signObj.signType === 2) {                        // 批量签章  骑缝章                        that.Seal_signatureCreatorBatchOrAcrossPage(signObj, pageNum, type)                    } else {                        // 签章函数                        that.seal_SignSealPosition(pageNum, type)                    }                } else {                    that.hideSignImage();                    alert('不在签章范围内')                }            }        })    };    that.calculateCurrentHeightAgain = function(pageNum, clickx_temp, clicky_temp, viewer_width){        var _height;        if(pageNum > 1){            _height = that.addHeight(pageNum);        } else {            _height = 0;        }        click_y = clicky_temp - _height;        var page_width = $('#viewer .page').eq(pageNum-1).width();        var blank_left = (viewer_width - page_width) / 2;        click_x = clickx_temp - blank_left;    };    that.seal_SignSealPositionForBigFileWriteCallBack = function(signParams)	 {         signParams.srcBytes = '';         signParams.srcStreamId = streamId; //streamId 全局变量         NetcaPKI.SignatureCreatorPdfSignSealFieldOrPosition(signParams)             .Then(function (res) {                 that.SignatureCreatorSuccessCallBack(res);             })             .Catch(function (res) {                 that.SignatureCreatorFailedCallBack(res);             });	 };     that.seal_SignSealPositionForBigFile = function(signParams) {         that.seal_SignSealPositionForBigFileWriteCallBack(signParams);	 };    that.seal_SignSealPosition = function(_pageNum, _type) {        var newscale = that.getScale();//缩放比例        var scale = 0.75; // 75% 对应72dpi; 如果不是75%缩放比例,需要对应转换为72dpi的坐标大小        var _xPos = parseInt((scale / newscale)*(click_x - sealImage_halfWidth));//签名域/签章左下角的水平向右方向坐标        var _yPos = parseInt((scale / newscale)*(click_y - sealImage_halfheight));//签名域/签章左下角的垂直向上方向坐标        var params = {            srcFile: '',                      //源pdf文件            srcBytes: NetcaPDFSeal.SetPDFBytes,                    //源Pdf文件的Base64编码            destFile: '',                    //目标pdf文件            certEncode: certEncode,                //签名证书Base64编码            selMode: 1,                      //操作模式            signFieldText: '',          //签名域显示的文字            sealImageEncode: sealImageSrc,      //签章图片Base64编码            revInfoIncludeFlag: revInfoIncludeFlag,//是否包含吊销信息            SignPosition:                           //签名位置对象                {                    pageNum: _pageNum,                  //PDF文档的页码                    xPos: _xPos,                        //签名域/签章左下角的水平向右方向坐标                    yPos: _yPos,                        //签名域/签章左下角的垂直向上方向坐标                    width: parseInt(originImage_width),                      //签名域/签章的宽度                    height: parseInt(originImage_height)                    //签名域/签章的高度                },            Tsa:                                    //时间戳对象                {                    tsaUrl: timeStamp.tsaUrl,                    //时间戳地址                    tsaUsr: timeStamp.tsaUsr,                    //时间戳服务对应用户名                    tsaPwd: timeStamp.tsaPwd,                    //时间戳服务对应用户的密码                    tsaHashAlgo: timeStamp.tsaHashAlgo           //时间戳使用的hash算法,例如”sha-1”,”sha-256”等                },            synVerify: true, //签完名之后同步验证文档            synGetSignFiled: true, //签完名之后同步获取签名域            level: verifyLevel, //验证级别            onlineVerifyRevok: isOnlineverifyrevoke //是否在线验证吊销信息        };        if(_type === 2){            //无外观签名            params.sealImageEncode = null;            params.SignPosition =            {                pageNum:-1,                xPos:0,                yPos:0,                width:0,                height:0            };            params.visible=false;        }		if(that.isBigFile(params.srcBytes))        {            params.srcBytes = '';            params.srcStreamId = unfinishedStreamId;            params.isReturnStreamId = true;        }        NetcaPKI.SignatureCreatorPdfSignSealFieldOrPosition(params)            .Then(function (res) {                filedFlag = true;//开启刚签完的章能撤章                that.SignatureCreatorSuccessCallBack(res);            })            .Catch(function (res) {                that.SignatureCreatorFailedCallBack(res);            });    };    /**批量签章或骑缝章 要求文件没有做过电子签章/签名*/    that.Seal_signatureCreatorBatchOrAcrossPage = function(signObj, _pageNum, _type){        //var page = _pageNum;//当前页码        var newscale = that.getScale();//缩放比例        var scale = 0.75; // 75% 对应72dpi; 如果不是75%缩放比例,需要对应转换为72dpi的坐标大小        var _xPos = parseInt((scale / newscale)*(click_x - sealImage_halfWidth));//签名域/签章左下角的水平向右方向坐标        var _yPos = parseInt((scale / newscale)*(click_y - sealImage_halfheight));//签名域/签章左下角的垂直向上方向坐标        //Tsa对象说明        var Tsa = {            tsaUrl: timeStamp.tsaUrl,      //时间戳地址            tsaUsr: timeStamp.tsaUsr,       //时间戳服务对应用户名            tsaPwd: timeStamp.tsaPwd,        //时间戳服务对应用户的密码            tsaHashAlgo: timeStamp.tsaHashAlgo        };        //批量签章        if(signObj.signType === 1){            //batchSeal对象说明            var batchSeal = {                signaturePage: signObj.batchSignParams.startPageNum, //电子签章所在页码,目前仅支持批量签章开始页或结束页                xPos: _xPos,                         //签名域/签章左下角的水平向右方向坐标                yPos: _yPos,                         //签名域/签章左下角的垂直向上方向坐标                width: parseInt(originImage_width),                height: parseInt(originImage_height),                startPage: signObj.batchSignParams.startPageNum,   // 从开始页计算,第n页:例如:1为第一页;                endPage: signObj.batchSignParams.endPageNum       //从最尾页计算,最后第n页:例如:-1为最后一页            };            var params = {                srcBytes : NetcaPDFSeal.SetPDFBytes,                 //目标pdf文件                certEncode : certEncode,                //签名证书Base64编码                sealImageEncode : sealImageSrc,                      //签章图片Base64编码                revInfoIncludeFlag : revInfoIncludeFlag,//是否包含吊销信息                batchSeal: batchSeal,                                //batchSeal对象说明                Tsa: Tsa,                                             //Tsa对象说明                synVerify: true, //签完名之后同步验证文档                synGetSignFiled: true, //签完名之后同步获取签名域                level: verifyLevel, //验证级别                onlineVerifyRevok: isOnlineverifyrevoke //是否在线验证吊销信息            };            if(that.isBigFile(params.srcBytes)) {                params.srcBytes = '';                params.srcStreamId = unfinishedStreamId;                params.isReturnStreamId = true;            }            NetcaPKI.signatureCreatorBatchSeal(params)                .Then(function(res){                    NetcaSignAPI.SignatureCreatorSuccessCallBack(res)                })                .Catch(function(res){                    NetcaSignAPI.SignatureCreatorFailedCallBack(res)                })        }        //骑缝章        if(signObj.signType === 2){            //acrossPageSeal对象说明            var acrossPageSeal = {                signaturePage: signObj.acrosspageSignParams.startPageNum, //电子签章所在页码,目前仅支持批量签章开始页或结束页                xPos: _xPos,                         //签名域/签章左下角的水平向右方向坐标                yPos: _yPos,                         //签名域/签章左下角的垂直向上方向坐标                width: parseInt(originImage_width),                height: parseInt(originImage_height),                startPage: signObj.acrosspageSignParams.startPageNum,     // 从开始页计算,第n页:例如:1为第一页;                endPage: signObj.acrosspageSignParams.endPageNum       //从最尾页计算,最后第n页:例如:-1为最后一页            };            var params = {                srcBytes : NetcaPDFSeal.SetPDFBytes,                 //目标pdf文件                certEncode : certEncode,                //签名证书Base64编码                sealImageEncode : sealImageSrc,                      //签章图片Base64编码                revInfoIncludeFlag : revInfoIncludeFlag,//是否包含吊销信息                acrossPageSeal: acrossPageSeal,                                //batchSeal对象说明                Tsa: Tsa,                                             //Tsa对象说明                synVerify: true, //签完名之后同步验证文档                synGetSignFiled: true, //签完名之后同步获取签名域                level: verifyLevel, //验证级别                onlineVerifyRevok: isOnlineverifyrevoke //是否在线验证吊销信息            };            if(that.isBigFile(params.srcBytes)) {                params.srcBytes = '';                params.srcStreamId = unfinishedStreamId;                params.isReturnStreamId = true;            }            NetcaPKI.signatureCreatorAcrossPageSeal(params)                .Then(function(res){                    NetcaSignAPI.SignatureCreatorSuccessCallBack(res)                })                .Catch(function(res){                    NetcaSignAPI.SignatureCreatorFailedCallBack(res)                })        }    };	 that.SignatureCreatorSuccessReadStreamUpdateCallBack = function(res, signSuccessRes,index)	 {            completedStreamId = res.streamId;		    signSuccessRes.destFileEncode=signSuccessRes.destFileEncode+res.data;		    if(!res.hasMoreData)			{                that.SignatureCreatorCallBack(signSuccessRes, res.streamId);				return;			}			var params = {				streamId: res.streamId,				length: writeLength*1024*1024			};		 NetcaPKI.readStream(params)            .Then(function (res) {                that.SignatureCreatorSuccessReadStreamUpdateCallBack(res, signSuccessRes);            })            .Catch(function (res) {                that.SignatureCreatorFailedCallBack(res, index);            });	 };	 that.SignatureCreatorSuccessReadStreamCallBack = function(signSuccessRes)	 {        completedStreamId = signSuccessRes.destFileStream.streamId;		signSuccessRes.destFileEncode='';		var params = {			streamId: signSuccessRes.destFileStream.streamId,			length: writeLength*1024*1024		};		 NetcaPKI.readStream(params)            .Then(function (res) {                that.SignatureCreatorSuccessReadStreamUpdateCallBack(res, signSuccessRes);            })            .Catch(function (res) {                that.SignatureCreatorFailedCallBack(res);            });	 };    // 签章成功回调    that.SignatureCreatorSuccessCallBack = function(res){        var streamId;        if(res.destFileStream){            streamId = res.destFileStream.streamId;        }        //大文件		if(res.destFileEncode == null ||res.destFileEncode.length ==0 )		{            that.SignatureCreatorSuccessReadStreamCallBack(res);			return;		}        that.SignatureCreatorCallBack(res, streamId)    };    // 签章成功回调    that.SignatureCreatorCallBack = function(res, streamId){        that.resetOriginalState(res.destFileEncode);        that.SignatureCallBack(res, streamId);        NetcaPDFSeal.setPDFBytes(res.destFileEncode);        alert('签名/章成功');        var interval = setInterval(function(){            if (globalPDFViewerApplication.pdfDocument == null) {                console.info('Loading...');            } else {                if($('#viewer .page').length>0){                    console.info('Load Success...');                    clearInterval(interval);                    that.describeSignatureField(); //描绘签名域                    that.createRevokeEvent(streamId); //撤章事件                }            }        }, 1000);        certEncode = null;        sealImageSrc = null;        if(that.signCallbackEvent != null)        {            that.signCallbackEvent(JSON.stringify(res))        }    };    that.SignatureCallBack = function(res){        signFields = res.signFields; //签名域信息        that.VerifyInfos = res.VerifyInfos; //验证信息        that.displaySignedDataVerifyTip( res.VerifyInfos); // toobar下验证提示信息        that.createSignedDataVerifyInfo(); // 创建左边 签名状态  每个签名信息        that.displayCert(); // 显示证书信息        that.displayInfoFeild(); // 每个签名信息伸展或收缩显示        layer.closeAll('loading');    };    //创建数据流    that.createStreamCallBack = function(signParams){        var params = {            length: signParams.srcBytes.length        };        NetcaPKI.createStream(params)            .Then(function (res) {                unfinishedStreamId = res.streamId;                that.writeStreamCallBack(res, signParams)            })            .Catch(function (res) {                layer.closeAll('loading');                alert(res.msg);            });    };    // 写入数据流    that.writeStreamCallBack = function(res, signParams) {        //写入数据完成        if( res.streamWritePos >= signParams.srcBytes.length ) {            that.getSignatureFieldInfo('', res.streamId);            return;        }        var params = {            streamId:res.streamId,            data:signParams.srcBytes.substr(res.streamWritePos,writeLength*1024*1024)        };        NetcaPKI.writeStream(params)            .Then(function (res) {                that.writeStreamCallBack(res, signParams);            })            .Catch(function (res) {                layer.closeAll('loading');                alert(res.msg);            });    };    //读取数据流    that.readStreamCallBack = function() {        //10M        var params = {            streamId: stream.streamId,            length: writeLength*1024*1024        };        NetcaPKI.readStream(params)            .Then(function (res) {                that.readStreamUpdateCallBack(res)            })            .Catch(function (res) {                alert(res.msg)            });    };    that.readStreamUpdateCallBack = function(res) {        NetcaPDFSeal.SetPDFBytes += res.data;    };    // 销毁数据流    that.destoryStreamCallBack = function(id){        var params = {            streamId: id        };        NetcaPKI.destoryStream(params)            .Then(function (res) {               // console.log('销毁数据成功')            })            .Catch(function (res) {                alert(res.msg)            });    };    //  大文件 与 小文件 处理方式划分    that.isBigFile = function(srcBytes){        if (srcBytes != null && srcBytes.length >  bigFileSize*1024 * 1024)        {            return true;        } else {            return false;        }    };    // 签章失败回调    that.SignatureCreatorFailedCallBack = function(res){        that.hideSignImage();        alert("签名/章失败 " + res.msg);        if(that.signCallbackEvent != null)        {           that.signCallbackEvent(JSON.stringify(res))        }        layer.closeAll('loading');    };    /**     * 隐藏签章图片     * */    that.hideSignImage = function(){        $('.NetcaSignMoveDiv').css({'display':'none'});    };    /**     * 重置状态:关闭layer、签章图片隐藏、展示最新pdf     * */    that.resetOriginalState = function(res){        that.openPDF(res);        $('#NetcaSignMoveImage').attr('src','');        that.hideSignImage();    };    //获取页面缩放比例    that.getScale = function(){        var scale = Number($('#scaleSelect').val());//缩放比例        /*           ctrl+鼠标缩放页面时,缩放倍数不是option中预设的,获取到的scale会是0;           通过globalPDFViewerApplication.getCurrentScale()拿到当前的scale       * */        var currentScale = globalPDFViewerApplication.getCurrentScale();        scale = scale ?scale:currentScale;        return scale;    };    /**     * 获取签章客户端的配置信息     * */    that.getSealConfigInfo = function(OpenPDFBytes) {        that.isLoading();        $(".netcafieldInfo").remove(); //先删除旧的签名域        var params = {};        NetcaPKI.getSealConfigInfo(params)            .Then(function(res) {                that.getSealConfigInfoSuccessCallBack(res, OpenPDFBytes);            })            .Catch(function(res) {                that.getSealConfigInfoFailCallBack(res)            });    };    that.getSealConfigInfoSuccessCallBack = function(res, OpenPDFBytes){        isVerifyRevoke = res.verify.isVerifyRevoke; //是否验证签名时签名证书的吊销状态        isOnlineverifyrevoke = res.verify.isOnlineVerifyRevoke;//是否在线获取吊销信息        verifyLevel = res.verify.verifySignLevel;//验证签名的级别 3:验证签名和证书,并且验证签名证书的吊销状态;但不验证CA证书是否吊销        revInfoIncludeFlag = res.sign.isRevokeInclude;//签名时是否嵌入吊销状态        //签名时是否嵌入时间戳        var isTsaInclude = res.sign.isTsaInclude;        if(isTsaInclude){            for(var i=0;i<res.timeStamp.length;i++){                (function(i){                    if(res.timeStamp[i].checked){                        timeStamp.tsaUrl = res.timeStamp[i].url;                    }                })(i);            }        }        // 打开文档时是否自动验证签名        isVerifyOpen = res.verify.isVerifyOpen;        isVerifyOpenWithOpenBtn = res.verify.isVerifyOpen;        // 第一次创建数据流  大文件 创建流后再去验证文档        if(that.isBigFile(OpenPDFBytes)){            var params = { srcBytes: OpenPDFBytes};            that.createStreamCallBack(params);        } else {            // 获取签名域,再验证           NetcaSignAPI.getSignatureFieldInfo(OpenPDFBytes);        }    };    /**     * signatureVerifierVerifyPDF PDF签名文档进行验证     * */    that.signedDataVerify = function(_srcFile, _srcBytes, _level, _onlineVerifyRevoke,streamId){        var params = {            srcFile: _srcFile,            srcBytes: _srcBytes,			srcStreamId: streamId,            level: _level,            onlineVerifyRevoke: _onlineVerifyRevoke        };        NetcaPKI.signatureVerifierVerifyPDF(params)            .Then(function (res) {                that.SuccessSignedDataVerifyCallBack(res);            })            .Catch(function (res) {                that.FailedSignedDataVerifyCallBack(res);            });    };    that.SuccessSignedDataVerifyCallBack = function(res){        that.VerifyInfos = res.VerifyInfos; // 验证结果        that.displaySignedDataVerifyTip( res.VerifyInfos); // toobar下验证提示信息        that.createSignedDataVerifyInfo(); // 创建左边 签名状态  每个签名信息        that.displayCert(); // 显示证书信息        that.displayInfoFeild(); // 每个签名信息伸展或收缩显示        if(that.verifyCallbackEvent !=null){            that.verifyCallbackEvent(JSON.stringify(res)) //返回验证的对外信息        }        layer.closeAll('loading'); //关闭loading    };    that.displaySignedDataVerifyTip = function(info){        if(info.length){            if($('#netcasignedDataVerify').css('display') === 'none'){                $('#netcasignedDataVerify').css({                    "display":'inline-block'                })            }            var status = NetcaPDFSeal.getVerifySignSuccessFlag(info); //根据verifyResult 1成功 2不确定  3失败            if(status === 0){ //失败                $('.netcainvalidInfo').text('至少一个签名验证失败,请点击右方 "详细信息" 查询签名的详细验证信息。');                $('.netcainvalidIcon img').attr('src','ui/images/icon/certicon_invalid.png');            }else if(status === 1){ //成功                $('.netcainvalidInfo').text('签名验证成功,请点击右方 "详细信息" 查询签名的详细验证信息。');                $('.netcainvalidIcon img').attr('src','ui/images/icon/certicon_valid.png');            }else{ //-1 不确定                $('.netcainvalidInfo').text('文档内容自签名以来未被篡改,但至少有一个签名的证书验证不通过。请点击右方 "详细信息" 查询签名的详细验证信息。');                $('.netcainvalidIcon img').attr('src','ui/images/icon/certicon_known.png');            }            if($('#netcainvalidBtn').css('display') === 'none'){                $('#netcainvalidBtn').css({                    "display":'inline-block'                })            }            if($('#netcaDisplaySignedDataVerify').css('display') === 'block'){                $('#netcaDisplaySignedDataVerify').css({"top":"117px",'height':'84%'})            }            $('#viewerContainer').css({"margin-top":"47px"});        } else {            that.notFoundSignature();        }    };    that.FailedSignedDataVerifyCallBack = function(res){        if(res.status === -2006){            if(isDisplayVerifyTips){                that.notFoundSignature();            } else {                $('#netcasignedDataVerify').css('display', 'none');            }        } else{            alert('验证签名失败:'+res.msg);        }        if(that.verifyCallbackEvent !=null){            that.verifyCallbackEvent(JSON.stringify(res))        }        layer.closeAll('loading');    };    that.getSealConfigInfoFailCallBack = function(res){        layer.closeAll('loading');        // alert('获取电子签章客户端配置信息失败:' + res.msg);        $('.modal-background').show();    };    // 本文档找不到可验证的签名    that.notFoundSignature = function() {        $('.netcainvalidInfo').text('本文档找不到可验证的签名!');        $('.netcainvalidIcon img').attr('src','');        $('#netcasignedDataVerify').css('display', 'block');        $('#netcainvalidBtn').css('display', 'none');        $('#netcaDisplaySignedDataVerify').css('display', 'none');        $('#viewerContainer').css({"margin-top":"47px"});        that.VerifyInfos = null;        isDisplayVerifyTips = null;    };    /**     * 动态生成 签名验证 具体信息     * */    that.createSignedDataVerifyInfo = function(){        var icon = '';        var htmlDOM = '';        //清空节点内容        $("div").remove(".netcasignDetail");        for(var i=0;i<that.VerifyInfos.length;i++){            (function(i){                // verifyResult  确定签名状态                if(that.VerifyInfos[i].verifyResult === 3){                    icon = 'icon_invalid';                    that.VerifyInfos[i].status1 = "签名无效"                }else if(that.VerifyInfos[i].verifyResult === 2){                    icon = 'icon_know';                    that.VerifyInfos[i].status1 = "签名不确定"                } else if(that.VerifyInfos[i].verifyResult === 1){                    icon = 'icon_valid'; //不确定                    that.VerifyInfos[i].status1 = "签名有效"                }                // 验证文档的有效性                if(that.VerifyInfos[i].fileIntegrityVerfiy === 1){                    that.VerifyInfos[i].moreInfo = '文档未被更改或损坏';                    // 签名证书的路径构建                    if(that.VerifyInfos[i].signCertPathBuild === 1){                        // console.log('签名证书链完整')                    } else if(that.VerifyInfos[i].signCertPathBuild === 0){                        that.VerifyInfos[i].signCertPathBuildText = '签名证书链未构建'                    } else {//-1                        that.VerifyInfos[i].signCertPathBuildText = '签名证书链不完整'                    }                    // 从配置信息‘验证’,确定是否验证吊销信息                    if(isVerifyRevoke){                        // 如果签名本身存在吊销信息                        if(that.VerifyInfos[i].hasRevoke){                            that.VerifyInfos[i].isVerifyRevokeText = '已嵌入吊销信息('+ that.VerifyInfos[i].revokeStatus+')'                        } else{                            // 如果不存在,进一步确定是否开启在线验证吊销信息                            if(isOnlineverifyrevoke){                                that.VerifyInfos[i].isVerifyRevokeText = '在线验证吊销('+ that.VerifyInfos[i].revokeStatus+')'                            } else{                                that.VerifyInfos[i].isVerifyRevokeText = '未执行吊销检查'                            }                        }                    }                    // 是否验证时间戳                    if(that.VerifyInfos[i].hasTsa){                        that.VerifyInfos[i].hasTsaText = that.VerifyInfos[i].isTsaValid?'已嵌入时间戳(有效)':'已嵌入时间戳(无效)';                        if(!that.VerifyInfos[i].isTsaValid){                            if(that.VerifyInfos[i].tsaCertPathBuild === 0){                                that.VerifyInfos[i].tsaCertPathBuildText = '时间戳证书链未构建'                            } else if(that.VerifyInfos[i].tsaCertPathBuild === -1) {                                that.VerifyInfos[i].tsaCertPathBuildText =  '时间戳证书链不完整'                            }                        }                    }                } else if(that.VerifyInfos[i].fileIntegrityVerfiy === 0){                    that.VerifyInfos[i].moreInfo = '文档完整性未验证'                } else{                    that.VerifyInfos[i].moreInfo = '文件自签名后被更改或损坏'                }                htmlDOM +=                    '                        <div class="netcasignDetail" name='+that.VerifyInfos[i].fieldName+'>\n' +                    '                             <span class="btn_fold"><img class="btn_fold_img" src="ui/images/icon/btn_unfold.png"></span>\n' +                    '                            <span class="netcasubjectCN"><span><img src="ui/images/icon/'+icon+'.png" alt=""></span>'+that.VerifyInfos[i].signerName+'</span>\n' +                    '                            <div class="netcasignContent">\n' +                    '                                <div class="netcasignTip"><span>'+that.VerifyInfos[i].status1+'</span> <input type="button" value="详细" class="netcadetailBtn"><input type="hidden" value="'+that.VerifyInfos[i].certEncode+'" class="netcahiddenBtn"></div>\n' +                    '                                <div class="netcasignTime">\n' +                    '                                    <p>'+that.VerifyInfos[i].moreInfo+'</p>\n' +                    '                                    <p>域名:'+that.VerifyInfos[i].fieldName+'</p>\n' +                    '                                    <p><span> 签名时间:</span><br><span> '+that.VerifyInfos[i].signDate+'</span></p>\n' +                    '                                    <p class="signCertPathBuildText">'+that.VerifyInfos[i].signCertPathBuildText+'</p>\n' +                    '                                    <p class="hasTsa"><span> '+that.VerifyInfos[i].hasTsaText+'</span></br><span>'+that.VerifyInfos[i].tsaDate+'</span></p>\n' +                    '                                    <p class="hasTsaCertPathBuildText">'+that.VerifyInfos[i].tsaCertPathBuildText+'</p>\n' +                    '                                    <p class="isVerifyRevokeText">'+that.VerifyInfos[i].isVerifyRevokeText+'</p>\n' +                    '                                </div>\n' +                    '                            </div>\n' +                    '                        </div>';            })(i);        }        $('.netcasignInfo').append(htmlDOM);        var len = $('.hasTsa').length;        for(var j=0;j<len;j++){            if(that.VerifyInfos[j].hasTsa === false){                $('.hasTsa').eq(j).css({"display":'none'})            }            if(!that.VerifyInfos[j].tsaCertPathBuildText){                $('.hasTsaCertPathBuildText').eq(j).css({"display":'none'})            }            if(!that.VerifyInfos[j].signCertPathBuildText){                $('.signCertPathBuildText').eq(j).css({"display":'none'})            }            if(!that.VerifyInfos[j].isVerifyRevokeText){                $('.isVerifyRevokeText').eq(j).css({"display":'none'})            }        }        that.selectCertField(); // 选中签名状态中的某一个签名信息,显示选中的签名域        htmlDOM = null;        len = null;    };    that.displayCert = function() {        var arr = document.getElementsByClassName("netcadetailBtn");        var arr1 = document.getElementsByClassName('netcahiddenBtn');        var DeviceOutputId = document.getElementById('DeviceOutputId');        for (var i = 0; i < arr.length; i++) {            arr[i].index = i;            var _arr = arr[i];            _arr.onclick = function () {                DeviceOutputId.value = arr1[this.index].value;                that.uIDisplayCert(DeviceOutputId.value);                _arr = null;            }        }    };    that.uIDisplayCert = function(val){        var certEncode = val;        var selectType = "Device";        var selectCondition = "InValidity='True' && CertType='Signature'";        var params = {            cert: {                "encode": certEncode,                "type": selectType,                "condition": selectCondition            }        };        NetcaPKI.displayCert(params)            .Then(function(res){            })            .Catch(function (res) {                alert(res.msg);            });    };    /**     * 签名状态 切换显示     * */    that.displayInfoFeild = function() {        var btn_fold = document.getElementsByClassName("btn_fold");        for(var i=0;i<btn_fold.length;i++){            btn_fold[i].index = i;            var _btn_fold = btn_fold[i];            _btn_fold.onclick = function () {                if($('.netcasignTime').eq(this.index).css('display') === 'none'){                    $('.netcasignTime').eq(this.index).css({"display":"block"});                    $('.btn_fold_img').eq(this.index).attr('src','/public/netcasign/ui/images/icon/btn_fold.png')                }else{                    $('.netcasignTime').eq(this.index).css({"display":"none"});                    $('.btn_fold_img').eq(this.index).attr('src','/public/netcasign/ui/images/icon/btn_unfold.png')                }                _btn_fold = null;            }        }    };    /***     * 获取PDF文档的签名域信息     * */    that.getSignatureFieldInfo = function(signBytes,streamId){        if($(".netcafieldInfo").length){            $(".netcafieldInfo").remove(); //先删除旧的签名域        }        var params = {            srcFile: '',            srcBytes: signBytes,			srcStreamId: streamId        };        NetcaPKI.getSignatureFieldInfo(params)            .Then(function (res) {                that.getSignatureFieldInfoSuccessCallBack(res,streamId);            })            .Catch(function (res) {                that.getSignatureFieldInfoFailedCallBack(res);            });    };    that.getSignatureFieldInfoSuccessCallBack = function(res,streamId){        signFields = res.signFields; //签名域信息        that.describeSignatureField(); //描绘签名域        that.createRevokeEvent(streamId); //撤章事件        if(!signFields){            $('#netcasignedDataVerify').css('display', 'none');            layer.closeAll('loading');            return;        }        // 缩放pdf,只获取签名域,不需要重新验证        if(zoom){            zoom = false;            layer.closeAll('loading');            return;        }        //打开是否马上验证 和签名后 一定验证        if(!isVerifyOpen){            isVerifyOpen = true;            layer.closeAll('loading');            return;        }        if(isVerifyOpen){            if(streamId){ //大文件验证                that.signedDataVerify('', '', verifyLevel, isOnlineverifyrevoke, streamId);            } else { //小文件验证                that.signedDataVerify('', NetcaPDFSeal.SetPDFBytes, verifyLevel, isOnlineverifyrevoke);            }        }    };    // 描绘签名域    that.describeSignatureField = function() {        if($('.netcafieldInfo').length){            $('.netcafieldInfo').remove();        }        var viewer_width = $('#viewer').width();        var newscale = that.getScale();//缩放比例        var scale = 0.75; // 75% 对应72dpi; 如果不是75%缩放比例,需要对应转换为72dpi的坐标大小        var page_width;        var _brank;        if(signFields){            for(var i=0;i<signFields.length;i++){                (function(i){                    page_width = $('#viewer .page').eq(signFields[i].pageNum-1).width();                    _brank = (viewer_width - page_width) / 2;                    signFields[i].xPos = signFields[i].xPos * newscale / scale;                    signFields[i].yPos = signFields[i].yPos * newscale / scale;                    if(signFields[i].pageNum > 1){                        var _height = that.addHeight(signFields[i].pageNum);                        signFields[i].yPos = _height + signFields[i].yPos;                    }                    signFields[i].xPos = signFields[i].xPos + parseInt(_brank);                    signFields[i].width = signFields[i].width * newscale / scale;                    signFields[i].height = signFields[i].height * newscale / scale;                    // 签名域                    $('#viewerContainer').append(' <div class="netcafieldInfo" name='+ signFields[i].name +' style="position:absolute;z-index:99;width:'+signFields[i].width+'px;height:'+signFields[i].height+'px;left:'+signFields[i].xPos+'px;top:'+signFields[i].yPos+'px;"></div>');                    if(signFields[i].width === 0){                        $('.netcafieldInfo').eq(i).css({"display":"none"})                    }                })(i);            }            that.selectSignatureField(); //选中签名域 显示签名状态中的某一个的签名信息        } else {            $('#netcasignedDataVerify').css('display','none');            $('#viewerContainer').css({"margin-top":"0"});            $('#netcaDisplaySignedDataVerify').css('display','none');        }    };    that.getSignatureFieldInfoFailedCallBack = function(res){        layer.closeAll('loading');        // alert('签名域信息失败:'+res.msg);    };    that.zoomPDFBySelectOptionScale = function(){        // 缩放页面  重新描绘签名域        $('#scaleSelect').change(function(){            that.getSignatureFieldInfo(NetcaPDFSeal.SetPDFBytes, unfinishedStreamId);        })    };    that.createRevokeEvent = function(streamId) {        //  filedFlag 普通签章完成后的  签名/章  才有撤销按钮;批量签章、骑缝章没有撤销按钮        if(filedFlag){            $('.netcafieldInfo').eq($('.netcafieldInfo').length-1).append('' +                '<img id="btn_discard" src="/public/netcasign/ui/images/icon/btn_discard_nor.png" alt="" ' +                'style="position:absolute;top:-15px;right:-15px;z-index:1000;display: none;">' +                '');            $('.netcafieldInfo').eq($('.netcafieldInfo').length-1).hover(function(){                $('#btn_discard').css({'display':'block'});            },function(){                $('#btn_discard').css({'display':'none'});            });            $('#btn_discard').click(function(){                // -1表示最后的一个签名/章                that.isLoading();                if(streamId){                    that.signatureVerifierUndoPDF('',-1, unfinishedStreamId, true);                } else {                    that.signatureVerifierUndoPDF(NetcaPDFSeal.SetPDFBytes,-1);                }            });        }    };    that.signatureVerifierUndoPDF = function(_signBytes, _index, _streamId, _isReturnStreamId){        layer.confirm('是否需要撤销选定的签章?',{            btn: ['是','否'] //按钮        }, function(index){            layer.close(index);            var params = {                signFile: '',                signBytes: _signBytes,                index: _index,                srcStreamId: _streamId,                isReturnStreamId: _isReturnStreamId            };            NetcaPKI.signatureVerifierUndoPDF(params)                .Then(function (res) {                    if(res.srcBytes == null ||res.srcBytes.length ==0 ){                        that.signatureVerifierUndoPDFReadStreamCallBack(res);                        return;                    }                    that.revokeSignatureSuccessCall(res.srcBytes); //撤章成功回调                })                .Catch(function (res) {                    layer.closeAll('loading');                    alert('撤销签名/章失败:'+res.msg);                });        }, function(){            layer.closeAll('loading');        });    };    that.revokeSignatureSuccessCall = function(srcBytes) {        // 撤章成功回调        // 如果窗口大小改变  还得重绘签名域        NetcaPDFSeal.setPDFBytes(srcBytes);        that.openPDF(NetcaPDFSeal.SetPDFBytes);        filedFlag = false;        if(signFields.length){            signFields.pop();        }        if(that.VerifyInfos.length){            that.VerifyInfos.pop();        }        that.displaySignedDataVerifyTip(that.VerifyInfos);        $('.netcafieldInfo').last().remove();        $('.netcasignDetail').last().remove();        layer.closeAll('loading');    };    that.signatureVerifierUndoPDFReadStreamCallBack = function(signSuccessRes){        completedStreamId = signSuccessRes.srcBytesStream.streamId;        signSuccessRes.destFileEncode='';        var params = {            streamId: signSuccessRes.srcBytesStream.streamId,            length: writeLength*1024*1024        };        NetcaPKI.readStream(params)            .Then(function (res) {                that.SignatureVerifierUndoPDFReadStreamUpdateCallBack(res, signSuccessRes);            })            .Catch(function (res) {                alert('撤销签名/章失败:'+res.msg);            });    };    that.SignatureVerifierUndoPDFReadStreamUpdateCallBack = function(res, signSuccessRes)    {        completedStreamId = res.streamId;        signSuccessRes.destFileEncode = signSuccessRes.destFileEncode + res.data;        if(!res.hasMoreData)        {            that.revokeSignatureSuccessCall(signSuccessRes.destFileEncode);            return;        }        var params = {            streamId: res.streamId,            length: writeLength*1024*1024        };        NetcaPKI.readStream(params)            .Then(function (res) {                that.SignatureVerifierUndoPDFReadStreamUpdateCallBack(res, signSuccessRes);            })            .Catch(function (res) {                alert('撤销签名/章失败:'+res.msg);            });    };    /*** 选中签名域信息* */    that.selectSignatureField = function(){        var netcafieldInfo = document.getElementsByClassName("netcafieldInfo");        for(var i=0;i<netcafieldInfo.length;i++){            netcafieldInfo[i].index = i;            var _netcafieldInfo = netcafieldInfo[i];            _netcafieldInfo.onclick = function () {                // 通过签名域name 与 验证结果的fieldName 对应上                var name = $('.netcafieldInfo').eq(this.index).attr('name');                $('.netcafieldInfo').eq(this.index).css({'border':'4px dashed #426bf6'});                $('.netcafieldInfo').eq(this.index).siblings().css({'border':''});                $('.netcasignDetail[name='+name+']').css({"background":"#e2eeff"});                $('.netcasignDetail[name='+name+']').siblings().css({"background":"none"});                if(this.index === netcafieldInfo.length - 1){                    $('#btn_discard').css({'display':'block'});                    $('.netcafieldInfo').eq(this.index).off('hover');                }                _netcafieldInfo = null;            }        }    };    /**     * 选中标签信息     * */    that.selectCertField = function(){        var netcasignDetail = document.getElementsByClassName("netcasignDetail");        for(var i=0;i<netcasignDetail.length;i++){            netcasignDetail[i].index = i;            var _netcasignDetail = netcasignDetail[i];            _netcasignDetail.onclick = function () {                var name = $('.netcasignDetail').eq(this.index).attr('name');                $('.netcafieldInfo[name='+name+']').css({'border':'4px dashed #426bf6'});                $('.netcafieldInfo[name='+name+']').siblings().css({'border':''});                $('.netcasignDetail').eq(this.index).css({"background":"#e2eeff"});                $('.netcasignDetail').eq(this.index).siblings().css({"background":"none"});                var _top = parseFloat($('.netcafieldInfo[name='+name+']').css('top'));                $('#viewerContainer').scrollTop(_top);                _netcasignDetail = null;            }        }    };    /**打印*/    that.printPDF = function() {        var params = {            srcBytes: NetcaPDFSeal.SetPDFBytes        };        NetcaPKI.printPDF(params)            .Then(function(res){                alert('打印文档成功');            })            .Catch(function(res){                alert('打印文档失败:' + res.msg);            });    };    /**     * 点击close按钮,关闭签名验证信息     * */    that.closeSignedDataVerifyInfo = function(params){        if(params === 'netcainvalidClose'){            $('#netcasignedDataVerify').css('display','none');            $('#viewerContainer').css({"margin-top":"0"});            $('#netcaDisplaySignedDataVerify').css({"top":'70px','height':'92%'})        }        if(params === 'netcaclose2'){            $('#netcaDisplaySignedDataVerify').css({'display':'none'});            that.getSignatureFieldInfo(NetcaPDFSeal.SetPDFBytes);        }    };    /**     * 点击详细信息,显示左侧签名验证详细信息     * */    that.displaySignedDataVerifyInfo = function(){        $('#netcaDisplaySignedDataVerify').css({'display':'block',"top":'117px','height':'84%'});    };    // 鼠标移入移除签章菜单背景色变化    that.transBackground = function(name) {        $('.'+name).hover(function(){            $(this).css('background','#DBECFF');        },function(){            $(this).css('background','#fff');        });    };    that.setUIVisible = function(obj){        for (var k in obj) {            if (!obj[k]) {                $('#' + k).css({'display': 'none'});            }else{                $('#' + k).css({'display': 'inline-block'});            }        }        if(obj.NetcaToolBar === true){            $('#toolbarViewer').css({'display':'block'});        }else if(obj.NetcaToolBar === false){            $('#toolbarViewer').css({'display':'none'});        }    };    that.getWorkTime = function() {        var date = new Date();        var time = date.getMinutes() + ":" + date.getSeconds() + ":" + date.getMilliseconds();        return time;    };    that.closeFile = function() {        $('#viewer').children().css('display', 'none');        $('#netcasignedDataVerify').css('display', 'none');        $('#netcaDisplaySignedDataVerify').css('display', 'none');        $('.netcasignpdf').css('margin-top', '0');    };    that.openPDFWithUrl = function(url) {        var origin = window.location.origin;        var pathname = window.location.pathname;        var newUrl = origin + pathname + '?file=' + encodeURIComponent(url);        window.location = newUrl;    };    return that;})();var NetcaIESignAPI = (function(){    'use strict';    var that = {};    var readerAx;    that.openPDF = function(byteBase64){        if(readerAx == null)            readerAx = document.getElementById("NetcaReaderAx").object;        var comObj = null;        try {            var  NETCA_PKI_BASE64_NO_NL	= 1;            comObj = new ActiveXObject("NetcaPki.Utilities");            var bytesDecode = comObj.Base64Decode(byteBase64, NETCA_PKI_BASE64_NO_NL);            readerAx.PDFSavePath=":AutoSave:";            readerAx.AsyncOpenPDFBytes(bytesDecode);        } catch (e) {            alert("异常:" + e);        }    };    that.initPreView = function () {        var obj = {            'NetcaToolBar': false,            'navigationBar': false        };        that.setUIVisible(obj);    };    that.GetPDFBytes = function(){        if(readerAx == null)            readerAx = document.getElementById("NetcaReaderAx").object;        var path = readerAx.GetPDFBytes();        var comObj = new ActiveXObject("NetcaPki.Utilities");        var  NETCA_PKI_BASE64_NO_NL	=1;        NetcaPDFSeal.setPDFBytes(comObj.Base64Encode(path, NETCA_PKI_BASE64_NO_NL));    };    that.setUI = function (value,visiable) {        if (readerAx == null)            readerAx = document.getElementById("NetcaReaderAx").object;        readerAx.SetIndividuationUI(value, visiable, "");    };    that.initUI = function(){        var obj = {            // 'netcaopen':false,            'netcasave':false,            'netcasearch':false,            'netcaFirstSeparator':false,            'netcaSecondSeparator':false,            'netcaThirdSeparaor':false,            // 'netcaVerfity':false,            'netcaSetting':false,            'netcaAbout':false,            'navigationBar': false        };        $('#netcasignpdf').css('display','none');        that.setUIVisible(obj);    };    that.setUIVisible = function (obj ) {        var UI_PDF_TOOLBAR_BUTTON = 0; //工具栏        var UI_PDF_OPEN_BUTTON = 1; //打开按钮        var UI_PDF_SAVE_BUTTON = 2;  //保存按钮        var UI_PDF_SERACH_BUTTON = 3; //搜索按钮        var UI_PDF_ZOOM_IN_BUTTON = 4; //放大按钮        var UI_PDF_ZOOM_OUT_BUTTON = 5; //缩小按钮        var UI_PDF_ZOOM_RATION_COMBO = 6; //放大缩小比例列表框        var UI_PDF_FIRST_SEPARATOR = 7;//第一个分割符控件        var UI_PDF_FRONT_PAGE_BUTTON = 8;//上一页按钮        var UI_PDF_NEXT_PAGE_BUTTON = 9; //下一页按钮        var UI_PDF_PAGE_NUM_EDIT = 10;//页面数字        var UI_PDF_SECOND_SEPARATOR = 11; //第二个分割符控件        var UI_PDF_SIGN_BUTTON = 12; //签章按钮        var UI_PDF_VERIFY_BUTTON = 13; //验证按钮        var UI_PDF_THIRD_SEPARATOR = 14;  //第三个分割符控件        var UI_PDF_SETTING_BUTTON = 15; //设置按钮        var UI_PDF_ABOUT_BUTTON = 16; //关于按钮        var UI_PDF_NAVIGATION_BAR =        17 ;//导航栏        var UI_PDF_MARK_BUTTON	= 		 18 ;//书签按钮        var UI_PDF_ANNOT_BUTTON  =         19 ;//批注按钮        var UI_PDF_PRINT_BUTTON = 20;//打印按钮        var UI_PDF_COMMON_SIGN_MENU = 21; //签章签章        var UI_PDF_EMPLOYEE_SIGN_MENU = 22; //员工签章        var UI_PDF_INSTITUTION_SIGN_MENU = 23; //机构签章        var UI_PDF_ARTIFIFCIAL_SIGN_MENU = 24;//法人签章        var UI_PDF_CLOSE_BUTTON = 28;//关闭按钮        if (readerAx == null)            readerAx = document.getElementById("NetcaReaderAx").object;        //工具栏        if(obj.NetcaToolBar === true) {            readerAx.SetIndividuationUI(UI_PDF_TOOLBAR_BUTTON, true, "");        } else if (obj.NetcaToolBar === false) {            readerAx.SetIndividuationUI(UI_PDF_TOOLBAR_BUTTON, false, "");        }        //打开按钮        if(obj.openFile === true) {            readerAx.SetIndividuationUI(UI_PDF_OPEN_BUTTON, true, "");        } else if (obj.openFile === false) {            readerAx.SetIndividuationUI(UI_PDF_OPEN_BUTTON, false, "");        }        //关闭按钮        if(obj.netcasave === true) {            readerAx.SetIndividuationUI(UI_PDF_SAVE_BUTTON, true, "");        }else if(obj.netcasave === false){            readerAx.SetIndividuationUI(UI_PDF_SAVE_BUTTON, false, "");        }        //搜索        if(obj.viewFind === true) {            readerAx.SetIndividuationUI(UI_PDF_SERACH_BUTTON, true, "");        }else if(obj.viewFind === false){            readerAx.SetIndividuationUI(UI_PDF_SERACH_BUTTON, false, "");        }        //放大        if(obj.zoomIn  === true) {            readerAx.SetIndividuationUI(UI_PDF_ZOOM_IN_BUTTON, true, "");        }else if( obj.zoomIn === false){            readerAx.SetIndividuationUI(UI_PDF_ZOOM_IN_BUTTON, false, "");        }        //缩小        if(obj.zoomOut  === true) {            readerAx.SetIndividuationUI(UI_PDF_ZOOM_OUT_BUTTON, true, "");        }else if( obj.zoomOut === false){            readerAx.SetIndividuationUI(UI_PDF_ZOOM_OUT_BUTTON, false, "");        }        //缩放select控件        if(obj.scaleSelectContainer  === true) {            readerAx.SetIndividuationUI(UI_PDF_ZOOM_RATION_COMBO, true, "");        }else if( obj.scaleSelectContainer === false){            readerAx.SetIndividuationUI(UI_PDF_ZOOM_RATION_COMBO, false, "");        }        //第一个分割符控件        if(obj.netcaFirstSeparator === true) {            readerAx.SetIndividuationUI(UI_PDF_FIRST_SEPARATOR, true, "");        }else if(obj.netcaFirstSeparator === false){            readerAx.SetIndividuationUI(UI_PDF_FIRST_SEPARATOR, false, "");        }        //上一页        if(obj.previous  === true) {            readerAx.SetIndividuationUI(UI_PDF_FRONT_PAGE_BUTTON, true, "");        }else if( obj.previous === false){            readerAx.SetIndividuationUI(UI_PDF_FRONT_PAGE_BUTTON, false, "");        }        //下一页        if(obj.next  === true) {            readerAx.SetIndividuationUI(UI_PDF_NEXT_PAGE_BUTTON, true, "");        }else if( obj.next === false){            readerAx.SetIndividuationUI(UI_PDF_NEXT_PAGE_BUTTON, false, "");        }        //页面数字        if(obj.netcapage  === true) {            readerAx.SetIndividuationUI(UI_PDF_PAGE_NUM_EDIT, true, "");        }else if( obj.netcapage === false){            readerAx.SetIndividuationUI(UI_PDF_PAGE_NUM_EDIT, false, "");        }        //第二个分割符控件        if(obj.netcaSecondSeparator === true) {            readerAx.SetIndividuationUI(UI_PDF_SECOND_SEPARATOR, true, "");        }else if(obj.netcaSecondSeparator === false){            readerAx.SetIndividuationUI(UI_PDF_SECOND_SEPARATOR, false, "");        }        //关闭        if(obj.closeFile  === true) {            readerAx.SetIndividuationUI(UI_PDF_CLOSE_BUTTON, true, "");        }else if(obj.closeFile === false){            readerAx.SetIndividuationUI(UI_PDF_CLOSE_BUTTON, false, "");        }        //验证        if(obj.verify === true) {            readerAx.SetIndividuationUI(UI_PDF_VERIFY_BUTTON, true, "");        }else if(obj.verify === false){            readerAx.SetIndividuationUI(UI_PDF_VERIFY_BUTTON, false, "");        }        //第三个分割符控件        if(obj.netcaThirdSeparaor === true) {            readerAx.SetIndividuationUI(UI_PDF_THIRD_SEPARATOR, true, "");        }else if(obj.netcaThirdSeparaor === false){            readerAx.SetIndividuationUI(UI_PDF_THIRD_SEPARATOR, false, "");        }        //设置        if(obj.netcaSetting === true) {            readerAx.SetIndividuationUI(UI_PDF_SETTING_BUTTON, true, "");        }else if(obj.netcaSetting === false){            readerAx.SetIndividuationUI(UI_PDF_SETTING_BUTTON, false, "");        }        //关于        if(obj.netcaAbout === true) {            readerAx.SetIndividuationUI(UI_PDF_ABOUT_BUTTON, true, "");        }else if(obj.netcaAbout === false){            readerAx.SetIndividuationUI(UI_PDF_ABOUT_BUTTON, false, "");        }        //普通签章        if(obj.sign === true) {            readerAx.SetIndividuationUI(UI_PDF_COMMON_SIGN_MENU, true, "");        }else if(obj.sign === false){            readerAx.SetIndividuationUI(UI_PDF_COMMON_SIGN_MENU, false, "");        }        //员工签章        if(obj.netcastaff === true) {            readerAx.SetIndividuationUI(UI_PDF_EMPLOYEE_SIGN_MENU, true, "");        }else if(obj.netcastaff === false){            readerAx.SetIndividuationUI(UI_PDF_EMPLOYEE_SIGN_MENU, false, "");        }        //机构签章        if(obj.netcaorganization === true) {            readerAx.SetIndividuationUI(UI_PDF_INSTITUTION_SIGN_MENU, true, "");        }else if(obj.netcaorganization === false){            readerAx.SetIndividuationUI(UI_PDF_INSTITUTION_SIGN_MENU, false, "");        }        //法人签章        if(obj.netcalegalperson === true) {            readerAx.SetIndividuationUI(UI_PDF_ARTIFIFCIAL_SIGN_MENU, true, "");        }else if(obj.netcalegalperson === false){            readerAx.SetIndividuationUI(UI_PDF_ARTIFIFCIAL_SIGN_MENU, false, "");        }        //打印        if(obj.print === true) {            readerAx.SetIndividuationUI(UI_PDF_PRINT_BUTTON, true, "");        }else if(obj.print === false){            readerAx.SetIndividuationUI(UI_PDF_PRINT_BUTTON, false, "");        }        //导航栏        if(obj.navigationBar === true) {            readerAx.SetIndividuationUI(UI_PDF_NAVIGATION_BAR, true, "");        }else if(obj.navigationBar === false){            readerAx.SetIndividuationUI(UI_PDF_NAVIGATION_BAR, false, "");        }    };    /**初始化页面     * */    that.init = function(){        that.initUI();    };    that.signCallbackEvent = function(callback){        if(callback != null)        {            if (readerAx == null)                readerAx = document.getElementById("NetcaReaderAx").object;            readerAx.SetSignCallback(callback)        }    };    that.verifyCallbackEvent = function(callback){        if(callback != null)        {            if (readerAx == null)                readerAx = document.getElementById("NetcaReaderAx").object;            readerAx.SetVerifyCallback(callback)        }    };    that.openPDFWithUrl = function(url) {        if (readerAx == null)            readerAx = document.getElementById("NetcaReaderAx").object;        try {            readerAx.PDFSavePath = ":AutoSave:";            readerAx.AsyncOpenPDFUrl(url);        } catch(e) {            alert("异常:" + e);        }    };    return that;})();var NetcaPDFSeal = (function(){    'use strict';    /**set base64*/    var that = {        SetPDFBytes:''    };    that.setPDFBytes = function(INPDFbase64){        that.SetPDFBytes =  INPDFbase64    };    /**get base64*/    that.getSignPDFBytes = function(){        if (that._isIE()) {            NetcaIESignAPI.GetPDFBytes();        }        return that.SetPDFBytes    };    /**判断当前浏览器是否为IE浏览器     * */    that._isIE = function(){        var comObj = null;        try{            comObj = new ActiveXObject("NetcaPki.Utilities");            return true;        }catch(e){            return false;        }    };    /**     * 需要隐藏的功能按钮     * */    that.setUIVisible = function(obj){        if(NetcaPDFSeal._isIE()){            NetcaIESignAPI.setUIVisible(obj);        }else{            NetcaSignAPI.setUIVisible(obj);        }    };    /**初始化页面     * */    that.init = function(){        that.initUI();    };    that.initUI = function(){        if (that._isIE()) {            NetcaIESignAPI.initUI();        } else {            NetcaSignAPI.initUI();        }    };    /**打开pdf     * */    that.openPDFBytes = function(OpenPDFBytes){        var search = window.location.search;        var reg = new RegExp(/\?file=/);        if(that._isIE()){            NetcaIESignAPI.openPDF(OpenPDFBytes);        }else{            if(!reg.test(search)){                // url有file参数说明是使用url打开的,没有file则是使用base64字节流打开                return;                if(!OpenPDFBytes){                    alert('打开文档数据为空');                    return;                }                NetcaSignAPI.getSealConfigInfo(OpenPDFBytes);                NetcaSignAPI.openPDF(OpenPDFBytes);                NetcaPDFSeal.setPDFBytes(OpenPDFBytes);            }else {                var interval = setInterval(function(){                    if (globalPDFViewerApplication.pdfDocument == null) {                        console.info('Loading...');                    } else {                        if($('#viewer .page').length>0){                            clearInterval(interval);                            globalPDFViewerApplication.pdfDocument.getData().then(function(data){                                // var PDFBytes = NetcaUtils.arrayBufferToBase64(data);                                NetcaPDFSeal.setPDFBytes(data);                                // if (can_netcasign) {                                //     NetcaSignAPI.getSealConfigInfo(data);                                // }                            })                        }                    }                }, 1000);            }        }    };    that.getVerifySignSuccessFlag = function(arr){        var invalidArr = [];        var notSureArr = [];        for(var i=0;i<arr.length;i++){            if(arr[i].verifyResult === 3){ //签名无效                invalidArr.push(arr[i].verifyResult)            }            if(arr[i].verifyResult === 2){ //签名不确定                notSureArr.push(arr[i].verifyResult)            } // 签名有效        }        if(invalidArr.length){            return 0        }else{            if(notSureArr.length){                return -1            }else{                return 1            }        }    };    /**签章完成后对外提示接口*/    that.setSignCallbackEvent = function(callback){        if(that._isIE()){            NetcaIESignAPI.signCallbackEvent(callback)        }else{            NetcaSignAPI.signCallbackEvent = callback        }    };    that.setVerifyCallbackEvent = function(callback){        if(that._isIE()){            NetcaIESignAPI.verifyCallbackEvent(callback)        }else{            NetcaSignAPI.verifyCallbackEvent = callback        }    };    that.openPDFWithUrl = function(url) {        if(that._isIE()){            NetcaIESignAPI.openPDFWithUrl(url);        } else {            NetcaSignAPI.openPDFWithUrl(url);        }    };    return that;})();
 |