Forráskód Böngészése

内蒙古导出PDF时不时有冲突问题 + print优化

TonyKang 4 éve
szülő
commit
b577217821

+ 15 - 0
modules/reports/routes/rpt_tpl_router_fe.js

@@ -7,6 +7,21 @@ let rptTplRouter = express.Router();
 const reportTplController = require("./../controllers/rpt_tpl_controller");
 
 module.exports = function (app) {
+    app.get('/printReport/:size',  function(req, res) {
+        if (!req.session.sessionUser.id) {
+            res.redirect('/login');
+        }
+        else {
+            let size = req.params.size;
+            res.render('building_saas//report/html/rpt_print.html',
+                {
+                    userAccount: req.session.userAccount,
+                    userID: req.session.sessionUser.id,
+                    size: size
+                }
+            );
+        }
+    });
     app.get('/rpt_print',  function(req, res) {
         if (!req.session.sessionUser.id) {
             res.redirect('/login');

+ 8 - 7
public/web/rpt_value_define.js

@@ -279,11 +279,12 @@ const JV = {
     ORIENTATION_LANDSCAPE: "LANDSCAPE",
     ORIENTATION_PORTRAIT_CHN: "纵向",
     ORIENTATION_LANDSCAPE_CHN: "横向",
-    SIZE_A3: [11.69, 16.54],
-    SIZE_A4: [8.27, 11.69],
-    SIZE_A5: [5.83, 8.27],
+    SIZE_A3: [11.693, 16.535],
+    SIZE_A4: [8.268, 11.693],
+    SIZE_A5: [5.827, 8.268],
+    SIZE_B4: [9.84, 13.898],
     SIZE_B5: [6.93, 9.84],
-    SIZE_LETTER: [8.5, 11.0],
+    SIZE_LETTER: [8.5, 11.0], // 美、加等国的A4规格
     SIZE_LEGAL: [8.5, 14.0],
     SIZE_16K: [7.75, 10.75],
     SIZE_EXECUTIVE: [7.25, 10.5],
@@ -315,9 +316,9 @@ const JV = {
     PAGE_SELF_DEFINE: "自定义",
     PAGE_SPECIAL_MERGE_POS: "page_merge_pos",
 
-    PAGES_SIZE_STR: ["A3", "A4", "A5", "B5", "LETTER", "LEGAL", "EXECUTIVE", "16K"],
-    PAGES_SIZE_IDX: [8, 9, 11, 13, 1, 5, 7, 93],
-    PAGES_SIZE: [[11.69, 16.54], [8.27, 11.69], [5.83, 8.27], [6.93, 9.84], [8.5, 11.0], [8.5, 14.0], [7.25, 10.5], [7.25, 10.5]],
+    PAGES_SIZE_STR: ['A3', 'A4', 'A5', 'B4', 'B5', 'LETTER', 'LEGAL', 'EXECUTIVE', '16K'],
+    PAGES_SIZE_IDX: [8, 9, 11, 12, 13, 1, 5, 7, 93],
+    PAGES_SIZE: [[11.693, 16.535], [8.268, 11.693], [5.827, 8.268], [9.84, 13.898], [6.93, 9.84], [8.5, 11.0], [8.5, 14.0], [7.25, 10.5], [7.25, 10.5]],
 
     HUNDRED_PERCENT : 100.0,
 

+ 57 - 9
web/building_saas/report/html/rpt_print.html

@@ -13,13 +13,37 @@
         page-break-before: auto;
         page-break-after: auto;
     }
-    @page {
-        size: A4 portrait;
-        margin-top: 0cm;
-        margin-bottom: 0cm;
-        margin-left: 0mm;
-        margin-right: 0mm
-    }
+    <% if(size === 'A4') { %>
+        @page {
+            size: A4 portrait;
+            margin-top: 0cm; margin-bottom: 0cm; margin-left: 0mm; margin-right: 0mm
+        }
+    <% } else if(size === 'A3') { %>
+        @page {
+            size: A3 portrait;
+            margin-top: 0cm; margin-bottom: 0cm; margin-left: 0mm; margin-right: 0mm
+        }
+    <% } else if(size === 'B4') { %>
+        @page {
+            size: B4 portrait;
+            margin-top: 0cm; margin-bottom: 0cm; margin-left: 0mm; margin-right: 0mm
+        }
+    <% } else if(size === 'B5') { %>
+        @page {
+            size: B5 portrait;
+            margin-top: 0cm; margin-bottom: 0cm; margin-left: 0mm; margin-right: 0mm
+        }
+    <% } else if(size === 'LETTER') { %>
+        @page {
+            size: LETTER portrait;
+            margin-top: 0cm; margin-bottom: 0cm; margin-left: 0mm; margin-right: 0mm
+        }
+    <% } else { %>
+        @page {
+            size: A4 portrait;
+            margin-top: 0cm; margin-bottom: 0cm; margin-left: 0mm; margin-right: 0mm
+        }
+    <% } %>
     @media print {
         body {
             margin-top: 0mm;
@@ -32,6 +56,13 @@
     div {page: page}
 </style>
 <!--
+    @page {
+        size: A4 portrait;
+        margin-top: 0cm;
+        margin-bottom: 0cm;
+        margin-left: 0mm;
+        margin-right: 0mm
+    }
     .printPage {
         page: page
     }
@@ -48,9 +79,26 @@
 <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>
+<SCRIPT type="text/javascript">
+    const SCREEN_DPI = [];
+    function getScreenDPI() {
+        if (SCREEN_DPI.length === 0) {
+            if (window.screen.deviceXDPI != undefined) {
+                SCREEN_DPI.push(window.screen.deviceXDPI);
+                SCREEN_DPI.push(window.screen.deviceYDPI);
+            } else {
+                let tmpNode = document.createElement("DIV");
+                tmpNode.style.cssText = "width:1in;height:1in;position:absolute;left:0px;top:0px;z-index:99;visibility:hidden";
+                document.body.appendChild(tmpNode);
+                SCREEN_DPI.push(parseInt(tmpNode.offsetWidth));
+                SCREEN_DPI.push(parseInt(tmpNode.offsetHeight));
+                tmpNode.parentNode.removeChild(tmpNode);
+            }
+        }
+        return SCREEN_DPI;
+    }
+</SCRIPT>
 <body onload="loading()" onbeforeunload="closing()">
     <canvas id="chkCanvas" style="display:none"></canvas>
 </body>
-<SCRIPT type="text/javascript">
-</SCRIPT>
 </html>

+ 0 - 26
web/building_saas/report/html/rpt_printA3.html

@@ -1,26 +0,0 @@
-<!DOCTYPE html>
-<html lang="zh-CN">
-<head>
-    <meta charset="UTF-8">
-    <title></title>
-</head>
-<style type="text/css">
-    .pageBreak {
-        page-break-before: auto;
-        page-break-after: auto;
-    }
-    @page {size: A3 portrait;}
-    body {page: page}
-    div {page: page}
-</style>
-<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="loading()" onbeforeunload="closing()">
-<canvas id="chkCanvas" style="display:none"></canvas>
-</body>
-<SCRIPT type="text/javascript">
-</SCRIPT>
-</html>

+ 5 - 5
web/building_saas/report/js/rpt_main.js

@@ -1031,10 +1031,7 @@ let rptControlObj = {
         rptTplObj.pdfFont['SmartSimsun'].push(fontProperty);
         if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
             me._hidePdfIniPage();
-            setTimeout(function(){
-                me.getPDFEx();
-            }, 20);
-            // me.getPDFEx();
+            setTimeout(me.getPDFEx(), 100); // 100毫秒足够关闭PDF初始化page了吧
         }
     },
     getPDFPre: function () {
@@ -1044,7 +1041,6 @@ let rptControlObj = {
             return;
         }
         if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
-            $.bootstrapLoading.start();
             me.getPDFEx();
         } else {
             // dynamicLoadJs('/lib/jspdf/SmartSimsun-normal.js', 'normal', me.getPdfFontCallback);
@@ -1071,6 +1067,7 @@ let rptControlObj = {
                 params.rpt_names = rpt_names;
                 params.isOneSheet = true;
                 params.rptName = projectObj.project.projectInfo.name;
+                $.bootstrapLoading.start();
                 CommonAjax.postEx("report_api/getMultiReports", params, WAIT_TIME_EXPORT, true,
                     function(result){
                         $.bootstrapLoading.end();
@@ -1114,6 +1111,7 @@ let rptControlObj = {
                     params.orientation = ((zTreeOprObj.checkedRptTplNodes.length > 1)?null:me.getCurrentOrientation());
                     params.custCfg = zTreeOprObj.reportPageCfg;
                     params.option = "normal";
+                    $.bootstrapLoading.start();
                     CommonAjax.postEx("report_api/getMultiReports", params, WAIT_TIME_EXPORT, true,
                         function(result){
                             $.bootstrapLoading.end();
@@ -1147,6 +1145,8 @@ let rptControlObj = {
                     }
                 }
             }
+        } else {
+            $.bootstrapLoading.end();
         }
     },
     firstPage: function(dom) {

+ 14 - 0
web/building_saas/report/js/rpt_preview_common.js

@@ -44,6 +44,19 @@ function loading() {
 function showPreviewData(svgArr, actAreaArr, scaleFactor, pageSize, orientation, orgPixelSize) {
     let orgHeight = 793, orgWidth = 1122;
     let DFT_MARGIN = 2;
+    getScreenDPI();
+    //*
+    const pi = JV.PAGES_SIZE_STR.indexOf(pageSize);
+    if (pi >= 0) {
+        const sizeArr = JV.PAGES_SIZE[pi];
+        orgHeight = Math.round(sizeArr[0] * SCREEN_DPI[0]);
+        orgWidth = Math.round(sizeArr[1] * SCREEN_DPI[1]);
+    } else if (pageSize.indexOf('自定义') >= 0) {
+        //自定义
+    } else {
+        //其他未定义size(urgly size)
+    }
+    /*/
     if (pageSize === 'A3') {
         orgHeight = 1122;
         orgWidth = 793 * 2;
@@ -52,6 +65,7 @@ function showPreviewData(svgArr, actAreaArr, scaleFactor, pageSize, orientation,
     } else {
         //其他size(LEGAL, 16K etc.)
     }
+    //*/
     let pageHeight = orgHeight * scaleFactor, pageWidth = orgWidth * scaleFactor;
     if (orientation === "纵向") {
         pageHeight = orgWidth * scaleFactor;

+ 6 - 5
web/building_saas/report/js/rpt_print.js

@@ -22,11 +22,12 @@ let rptPrintHelper = {
                     sessionStorage.pageSize = rptControlObj.getCurrentPageSize();
                     sessionStorage.orientation = rptControlObj.getCurrentOrientation();
                     sessionStorage.scaleFactor = 1;
-                    if (sessionStorage.pageSize === 'A3') {
-                        window.open('/rpt_printA3');
-                    } else {
-                        window.open('/rpt_print');
-                    }
+                    // if (sessionStorage.pageSize === 'A3') {
+                    //     window.open('/rpt_printA3');
+                    // } else {
+                    //     window.open('/rpt_print');
+                    // }
+                    window.open('/printReport/' + sessionStorage.pageSize);
                 },
                 function(failRst){
                     sessionStorage.currentPageData = null;