| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283 | <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title></title>    <script src="/public/js/jquery/jquery-3.2.1.min.js"></script>    <script type="text/javascript" src="/public/jspdf/jspdf.min.js"></script>    <script type="text/javascript" src="/public/js/common_ajax.js"></script>    <script type="text/javascript" src="/public/report/js/rpt_public.js"></script>    <script type="text/javascript" src="/public/report/js/jpc_output_value_define.js"></script>    <script type="text/javascript" src="/public/report/js/rpt_figure.js"></script>    <script type="text/javascript" src="/public/report/js/jpc_output.js"></script>    <script type="text/javascript" src="/public/js/string_util_light.js"></script>    <script type="text/javascript" src="/public/report/js/rpt_signature.js?20231024"></script>    <script type="text/javascript" src="/public/report/js/rpt_move_signature.js"></script>    <script type="text/javascript" src="/public/report/js/rpt_jspdf.js"></script>    <!--    <link rel="stylesheet" href="/public/css/bootstrap/bootstrap.min.css">    -->    <link rel="shortcut icon" href="/public/images/favicon.ico"></head><style type="text/css"></style><body onload="pageLoading()"><div class="panel-body" id="print_preview_div" style="display:block">    <button class="btn btn-outline-primary btn-sm" type="button" onclick="exportPDF()">        <i class="fa fa-print"></i>        导出 <span id="checkCountPrint" class="badge badge-primary"></span>    </button>    <div class="pageContainer">        <canvas id="rptIndividualCanvas" height="100%" width="100%"></canvas>    </div></div></body><SCRIPT type="text/javascript">    const SCREEN_DPI = [96, 96];    const OSS_PATH = '<%- OSS_PATH %>';    const WAIT_TIME_EXPORT = 300000;    const current_stage_status = 3;    function getStageStatus() {        // 这个与current_stage_status是配套的,之前创建PDF的时候需要访问current_stage_status,后用getStageStatus()代替,那这里也要补充getStageStatus方法,另保留current_stage_status        return 3;    }    const PAGE_SHOW = {closeWatermark: 0, closeExportPdf: 0, closeExportExcel: 0, showArchive: 0};    const pdfFont = {'SmartSimsun': [], 'simhei': [], 'simkai': []};    const CUST_CFG = {        "fonts": [            {                "ID": "ReportTitle_Main",                "Name": "宋体",                "FontBold": "T",                "FontHeight": 32,                "FontItalic": "F",                "CfgDispName": "表标题",                "FontUnderline": "F"            },            {                "ID": "Column",                "Name": "宋体",                "FontBold": "F",                "FontHeight": 12,                "FontItalic": "F",                "CfgDispName": "列标题",                "FontUnderline": "F"            },            {                "ID": "Content",                "Name": "宋体",                "FontBold": "F",                "FontHeight": 12,                "FontItalic": "F",                "CfgDispName": "正文内容",                "FontUnderline": "F"            },            {                "ID": "Total",                "Name": "宋体",                "FontBold": "F",                "FontHeight": 12,                "FontItalic": "F",                "CfgDispName": "合计",                "FontUnderline": "F"            },            {                "ID": "Header",                "Name": "宋体",                "FontBold": "F",                "FontHeight": 12,                "FontItalic": "F",                "CfgDispName": "表眉/表脚",                "FontUnderline": "F"            }        ],        "margins": {            "Top": 12,            "Left": 15,            "Right": 15,            "Bottom": 15        },        "fillZero": false,        "isNarrow": false,        "borderThick": 2,        "showVerticalLine": true,        "closeWarterMark": true,        "continuousOutput": false    };    const PAGE_SIZE = '<%- size %>';    let currentPageRst = null;    let currentDownloadUrl = null;    let currentDownloadIdx = 0;    let currentReportName = '奉建项目现场收方单';    dynamicLoadJs('/public/jspdf/Arial Narrow-normal.js');    dynamicLoadJs('/public/jspdf/Arial Narrow-bold.js');    dynamicLoadJs('/public/jspdf/Arial Narrow-italic.js');    dynamicLoadJs('/public/jspdf/Arial Narrow-bolditalic.js');    function pageLoading() {        let req_params = JSON.parse(sessionStorage.req_params);        currentReportName = sessionStorage.rpt_name;        let params = {};        params.rpt_tpl_id = req_params.rpt_tpl_id;        params.pageSize = PAGE_SIZE;        params.project_id = req_params.project_id;        params.tender_id = req_params.tender_id;        params.stage_id = req_params.stage_id;        params.stage_status = 3;        params.closeWatermark = 1;        params.custCfg = CUST_CFG;        CommonAjax.postXsrfEx("/tender/report_api/getReport", params, 300000, true, getCookie('csrfToken_j'),            function(result){                currentPageRst = result.data;                _replaceKeyValue(currentPageRst);                let qrCodePath = sessionStorage.qrCodePath;                _addQRCode(currentPageRst, qrCodePath);                let canvas = document.getElementById("rptIndividualCanvas");                if (currentPageRst && currentPageRst.items && currentPageRst.items.length > 0) {                    if (currentPageRst.items.length > 1) {                        //理论上要清理冗余数据                        currentPageRst.items = currentPageRst.items.slice(0,1);                    }                    let size = JpcCanvasOutput.getReportSizeInPixel(currentPageRst, SCREEN_DPI);                    canvas.width = size[0] + 20;                    if (size[1] > size[0]) {                        canvas.height = size[1] + 100;                    } else {                        canvas.height = size[1] + 50;                    }                    JpcCanvasOutput.cleanCanvas(canvas);                    JpcCanvasOutput.drawPageBorder(currentPageRst, canvas, SCREEN_DPI);                    JpcCanvasOutput.drawToCanvas(currentPageRst, canvas, 1);                } else {                    //返回了无数据表                    JpcCanvasOutput.cleanCanvas(canvas);                    JpcCanvasOutput.drawPageBorder(currentPageRst, canvas, SCREEN_DPI);                }            }, function(err){                console.log(err);            }, function(ex){                console.log(ex);            }        );    }    function _replaceKeyValue(pageRst) {        if (sessionStorage.replace_key_params) {            let replace_key_params = JSON.parse(sessionStorage.replace_key_params);            if (pageRst.items && pageRst.items.length > 0) {                for (let pageItem of pageRst.items) {                    for (let cell of pageItem.cells) {                        for (let keyP in replace_key_params) {                            if (cell.Value === keyP) {                                cell.Value = replace_key_params[keyP];                            }                        }                    }                }            }        }    }    function _addQRCode(pageRst, qrCodePath) {        if (pageRst && pageRst.items && pageRst.items.length > 0) {            for (pageItem of pageRst.items) {                let maxRight = 0, minTop = 10000;                for (let cell of pageItem.cells) {                    maxRight = (cell.area.Right > maxRight) ? cell.area.Right : maxRight;                    minTop = (cell.area.Top < minTop) ? cell.area.Top : minTop;                }//                let offset = pageRst.MergeBand.Top - minTop - 5;                let offset = 86;                let left = maxRight - offset;                let bottom = minTop + offset;                let signCell = {area: {Left: left, Right: maxRight, Top: minTop, Bottom: bottom}, control: 'Column', path: qrCodePath, pic: null, signature_name: 'dummy_pic', style: 'Default_None', isOrgShow: true};                pageItem.signature_cells.push(signCell);                //注:这里不用async方式,只有一个二维图,一瞬间就能下载完                _getBlob(qrCodePath).then(blob => {                    // saveAs(blob, filename);                    let oFileReader = new FileReader();                    oFileReader.onloadend = function (e) {                        let base64 = e.target.result;                        // console.log("方式一》》》》》》》》》", base64)                        signCell.pic = base64;                    };                    oFileReader.readAsDataURL(blob);                });            }        }    }    function exportPDF() {        //导出PDF        if (currentPageRst) {            if (pdfFont['SmartSimsun'].length === 2) {                JpcJsPDFHelper.outputAsPdf(currentPageRst, PAGE_SIZE, currentReportName, [], []);            } else {                // dynamicLoadJs('https://d2.smartcost.com.cn/cach/SmartSimsun-normal.js', 'normal', _getPdfFontCallback);                dynamicLoadJs('https://d2.smartcost.com.cn/cach/SmartSimsun-normal2.js', 'normal', _getPdfFontCallback);                dynamicLoadJs('https://d2.smartcost.com.cn/cach/SmartSimsun-bold.js', 'bold', _getPdfFontCallback);            }        }    }    function dynamicLoadJs(url, type, callback) {        let head = document.getElementsByTagName('head')[0];        let script = document.createElement('script');        script.type = 'text/javascript';        script.src = url;        if (callback) {            script.onload = script.onreadystatechange = function (event) {                callback(type);                script.onload = script.onreadystatechange = null;            };        }        head.appendChild(script);    }    function _getPdfFontCallback(fontProperty) {        if (pdfFont['SmartSimsun'].indexOf(fontProperty) < 0) {            pdfFont['SmartSimsun'].push(fontProperty);        }        if (pdfFont['SmartSimsun'].length === 2) {            JpcJsPDFHelper.outputAsPdf(currentPageRst, PAGE_SIZE, currentReportName, [], []);        }    }    function downloadReport(urls) {        //考虑到多个报表下载,一些浏览器(如chrome)不允许一下子下载多个文件,得缓缓处理,统一在这处理        currentDownloadUrl = null;        currentDownloadIdx = 0;        const private_download = function() {            if (currentDownloadIdx >= 0 && currentDownloadIdx < urls.length) {                currentDownloadUrl = urls[currentDownloadIdx];                currentDownloadIdx++;                window.location = currentDownloadUrl;                if (currentDownloadIdx < urls.length) setTimeout(private_download, 2000);            }        }        private_download();    }    function _getBlob(url) {        return new Promise(resolve => {            const xhr = new XMLHttpRequest();            xhr.open('GET', url, true);            xhr.responseType = 'blob';            xhr.onload = () => {                if (xhr.status === 200) {                    resolve(xhr.response);                }            };            xhr.send();        });    }</SCRIPT></html>
 |