Quellcode durchsuchen

前端导出PDF优化

TonyKang vor 6 Jahren
Ursprung
Commit
00c49c5171

+ 1 - 2
web/building_saas/main/html/main.html

@@ -2040,9 +2040,8 @@
     <script type="text/javascript" src="/web/building_saas/main/js/views/material_calc_view.js"></script>
     <script type="text/javascript" src="/public/web/storageUtil.js"></script>
     <script type="text/javascript" src="/lib/jspdf/jspdf.min.js"></script>
-    <script type="text/javascript" src="/lib/jspdf/SmartSimsun-normal.js"></script>
-    <script type="text/javascript" src="/lib/jspdf/SmartSimsun-bold.js"></script>
     <script type="text/javascript" src="/web/building_saas/report/js/rpt_jspdf.js"></script>
+
     <!-- endinject -->
 
     <% if (overWriteUrl != undefined) { %>

+ 0 - 56
web/building_saas/report/html/rpt_export_pdf.html

@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title></title>
-</head>
-
-    <script type="text/javascript" src="/web/building_saas/report/js/jpc_output_value_define.js"></script>
-    <script src="/lib/jquery/jquery-3.2.1.min.js"></script>
-    <script type="text/javascript" src="/web/building_saas/report/js/jpc_output.js"></script>
-    <script type="text/javascript" src="/web/building_saas/report/js/rpt_print.js"></script>
-    <script type="text/javascript" src="/web/building_saas/report/js/rpt_preview_common.js"></script>
-    <body onload="pdfLoading()" onbeforeunload="closing()">
-    <canvas id="chkCanvas" style="display:none"></canvas>
-
-</body>
-<SCRIPT type="text/javascript">
-    function pdfLoading() {
-        if (sessionStorage.multiRptsData) {
-            let multiRptData = JSON.parse(sessionStorage.multiRptsData);
-            let scaleFactor = parseInt(sessionStorage.scaleFactor);
-            for (let idx = 0; idx < multiRptData.length; idx++) {
-                let pageData = multiRptData[idx];
-                if (idx === 0) {
-                    $(document).attr("title", pageData[JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
-                }
-                let orgPixelSize = getPixelSize(pageData);
-                let actArea = getActualArea(pageData);
-                let svgArr = rptPrintHelper.buildSvgArr(pageData, actArea, G_OFFSET_X, G_OFFSET_Y);
-                //let orientation = (pageData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][0] < pageData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][1])?"纵向":"横向";
-                let orientation = "纵向";
-                showPreviewData(svgArr, actArea, scaleFactor, sessionStorage.pageSize, orientation, orgPixelSize);
-            }
-            window.print();
-        } else if (sessionStorage.currentPageData) {
-            let pageData = JSON.parse(sessionStorage.currentPageData);
-            let scaleFactor = parseInt(sessionStorage.scaleFactor);
-            let orgPixelSize = getPixelSize(pageData);
-            let actArea = getActualArea(pageData);
-            let svgArr = rptPrintHelper.buildSvgArr(pageData, actArea, G_OFFSET_X, G_OFFSET_Y);
-            $(document).attr("title", pageData[JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
-            //showPreviewData(svgArr, scaleFactor, sessionStorage.pageSize, sessionStorage.orientation);
-            showPreviewData(svgArr, actArea, scaleFactor, sessionStorage.pageSize, "纵向", orgPixelSize);
-            window.print();
-        } else if (sessionStorage.currentPageSvgData) {
-            let svgArr = JSON.parse(sessionStorage.currentPageSvgData);
-            let scaleFactor = 1;
-            //showPreviewData(svgArr, scaleFactor, sessionStorage.pageSize, sessionStorage.orientation);
-            showPreviewData(svgArr, null, scaleFactor, sessionStorage.pageSize, "纵向", null);
-            window.print();
-        } else {
-            //alert("没有报表数据!");
-        }
-    }
-</SCRIPT>
-</html>

+ 1 - 1
web/building_saas/report/js/rpt_jspdf.js

@@ -3,7 +3,7 @@
  */
 
 const PDF_SCALE = 0.75;
-const DPI = getScreenDPI();
+// const DPI = getScreenDPI();
 
 let JpcJsPDFHelper = {
     doc: null,

+ 44 - 52
web/building_saas/report/js/rpt_main.js

@@ -14,6 +14,7 @@ let fontSuffixMapObj = {"表标题": "title", "列标题": "column", "正文内
 
 let rptTplObj = {
     hasInitialized: false,
+    pdfFont: {'SmartSimsun': [], 'simhei': [], 'simkai': []},
     iniPage: function() {
         let me = this;
         if (!me.hasInitialized) {
@@ -24,7 +25,24 @@ let rptTplObj = {
             let canvas = document.getElementById("rptCanvas");
             canvas.onclick = canvasOprObj.canvasOnClick;
             canvas.onmousemove = canvasOprObj.canvasOnMouseMove;
+            if (JpcJsPDFHelper.doc === null) {
+                JpcJsPDFHelper.initialize('p', 'pt', 'a4');
+            }
+            dynamicLoadJs('/lib/jspdf/SmartSimsun-normal.js');
+            dynamicLoadJs('/lib/jspdf/SmartSimsun-bold.js', me.pdfFontSimsunCallBack);
         }
+    },
+    pdfFontSimsunCallBack: function() {
+        rptTplObj.pdfFont['SmartSimsun'].push('normal');
+        rptTplObj.pdfFont['SmartSimsun'].push('bold');
+    },
+    pdfFontSimkaiCallBack: function() {
+        rptTplObj.pdfFont['simkai'].push('normal');
+        rptTplObj.pdfFont['simkai'].push('bold');
+    },
+    pdfFontSimheiCallBack: function() {
+        rptTplObj.pdfFont['simhei'].push('normal');
+        rptTplObj.pdfFont['simhei'].push('bold');
     }
 }
 
@@ -981,15 +999,6 @@ let rptControlObj = {
                                     let pageData = result[idx];
                                     JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx]);
                                 }
-                                // sessionStorage.multiRptsData = JSON.stringify(result);
-                                // sessionStorage.pageSize = rptControlObj.getCurrentPageSize();
-                                // sessionStorage.orientation = rptControlObj.getCurrentOrientation();
-                                // sessionStorage.scaleFactor = 1;
-                                // if (sessionStorage.pageSize === 'A3') {
-                                //     window.open('/rpt_printA3');
-                                // } else {
-                                //     window.open('/rpt_print');
-                                // }
                             },
                             function(failRst){
                                 console.log(failRst);
@@ -999,56 +1008,14 @@ let rptControlObj = {
                             }
                         );
                     } else {
+                        //这个分支是为了减少请求,用户已经点过的表,又没有勾选,那么就直接导出成PDF
                         let pageSize = rptControlObj.getCurrentPageSize();
                         let pageData = zTreeOprObj.currentRptPageRst;
                         JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[0]);
                     }
-                    //me.currentRptPageRst
                 }
             }
         }
-        /*
-        if (zTreeOprObj.checkedRptTplNodes && zTreeOprObj.checkedRptTplNodes.length > 0) {
-            let rptIds = [], rpt_names = [];
-            let params = {};
-            params.pageSize = rptControlObj.getCurrentPageSize();
-            params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:rptControlObj.getCurrentOrientation());
-            params.custCfg = zTreeOprObj.reportPageCfg;
-            params.prj_id = projectObj.project.projectInfo.ID;
-            for (let tplNode of zTreeOprObj.checkedRptTplNodes) {
-                rptIds.push(tplNode.refId);
-                rpt_names.push(tplNode.name);
-            }
-            params.rpt_ids = rptIds.join(",");
-            CommonAjax.postEx("report_api/getMultiReports", params, 30000, true,
-                function(result){
-                    // sessionStorage.multiRptsData = JSON.stringify(result);
-                    // sessionStorage.pageSize = rptControlObj.getCurrentPageSize();
-                    // sessionStorage.orientation = rptControlObj.getCurrentOrientation();
-                    // sessionStorage.scaleFactor = 1;
-                    // window.open('/rpt_print');
-                    // console.log(result);
-                    let pageSize = rptControlObj.getCurrentPageSize();
-                    for (let idx = 0; idx < result.length; idx++) {
-                        let pageData = result[idx];
-                        // let orientation = (pageData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][0] < pageData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][1])?"portrait":"landscape";
-                        // showPreviewData(svgArr, actArea, scaleFactor, sessionStorage.pageSize, orientation, orgPixelSize);
-                        JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rpt_names[idx]);
-                    }
-                },
-                function(failRst){
-                    sessionStorage.currentPageData = null;
-                    console.log(failRst);
-                },
-                function(exceptionRst){
-                    sessionStorage.currentPageData = null;
-                    console.log(exceptionRst);
-                }
-            );
-        } else {
-            //不可能的branch
-        }
-        //*/
     },
     firstPage: function(dom) {
         let canvas = document.getElementById("rptCanvas");
@@ -1163,3 +1130,28 @@ function downloadReport(urls) {
     }
     private_download();
 }
+
+function dynamicLoadJs(url, 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 () {
+            if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete"){
+                callback();
+                script.onload = script.onreadystatechange = null;
+            }
+        };
+    }
+    head.appendChild(script);
+}
+
+function dynamicLoadCss(url) {
+    let head = document.getElementsByTagName('head')[0];
+    let link = document.createElement('link');
+    link.type='text/css';
+    link.rel = 'stylesheet';
+    link.href = url;
+    head.appendChild(link);
+}