Selaa lähdekoodia

打印预览导出优化 + 增加buffer时间

TonyKang 4 vuotta sitten
vanhempi
commit
c60cb00e77

+ 1 - 1
modules/reports/controllers/rpt_controller.js

@@ -647,7 +647,7 @@ module.exports = {
     },
     getExcelInOneBook: function (req, res) {
         let prj_id = req.params.prj_id,
-            prj_ids = params.prj_ids,
+            prj_ids = req.params.prj_ids,
             rpt_ids = req.params.rpt_ids.split(','),
             flags = req.params.flags;
             pageSize = req.params.size,

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

@@ -7,28 +7,17 @@ let rptTplRouter = express.Router();
 const reportTplController = require("./../controllers/rpt_tpl_controller");
 
 module.exports = function (app) {
-    app.get('/rpt_print',  function(req, res) {
+    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
-                }
-            );
-        }
-    });
-    app.get('/rpt_printA3',  function(req, res) {
-        if (!req.session.sessionUser.id) {
-            res.redirect('/login');
-        }
-        else {
-            res.render('building_saas//report/html/rpt_printA3.html',
-                {
-                    userAccount: req.session.userAccount,
-                    userID: req.session.sessionUser.id
+                    userID: req.session.sessionUser.id,
+                    size: size
                 }
             );
         }

+ 8 - 7
public/web/rpt_value_define.js

@@ -280,11 +280,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],
@@ -316,9 +317,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,
 

+ 7 - 1
web/building_saas/report/html/rpt_main.html

@@ -53,7 +53,13 @@
                                 <div class="btn-group" role="group">
                                     <button id="btnRptPageSize" type="button" class="btn btn-outline-primary btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">A4</button>
                                     <div class="dropdown-menu" aria-labelledby="btnGroupDrop2">
-                                        <a class="dropdown-item" id="hrefRptPageSize" style="cursor:pointer" onclick="zTreeOprObj.changePageSize(this)">A3</a>
+                                        <a class="dropdown-item" id="hrefRptPageSize_A3" style="cursor:pointer" onclick="zTreeOprObj.changePageSize(this)">A3</a>
+                                        <!-- 
+                                        <a class="dropdown-item" id="hrefRptPageSize_A5" style="cursor:pointer" onclick="zTreeOprObj.changePageSize(this)">A5</a>
+                                        <a class="dropdown-item" id="hrefRptPageSize_B4" style="cursor:pointer" onclick="zTreeOprObj.changePageSize(this)">B4</a>
+                                        <a class="dropdown-item" id="hrefRptPageSize_B5" style="cursor:pointer" onclick="zTreeOprObj.changePageSize(this)">B5</a>
+                                        <a class="dropdown-item" id="hrefRptPageSize_LETTER" style="cursor:pointer" onclick="zTreeOprObj.changePageSize(this)">LETTER</a>
+                                        -->
                                     </div>
                                 </div>
                             </div>

+ 48 - 7
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;
@@ -52,4 +76,21 @@
 <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>
+    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></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>

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

@@ -667,7 +667,7 @@ let rptControlObj = {
         rptTplObj.pdfFont['SmartSimsun'].push(fontProperty);
         if (rptTplObj.pdfFont['SmartSimsun'].length === 2) {
             me._hidePdfIniPage();
-            setTimeout(me.getPDFEx(), 20); // 20毫秒足够关闭PDF初始化page了吧
+            setTimeout(me.getPDFEx(), 100); // 100毫秒足够关闭PDF初始化page了吧
         }
     },
     getPDFPre: function () {

+ 15 - 1
web/building_saas/report/js/rpt_preview_common.js

@@ -43,7 +43,20 @@ function loading() {
 
 function showPreviewData(svgArr, actAreaArr, scaleFactor, pageSize, orientation, orgPixelSize) {
     let orgHeight = 793, orgWidth = 1122;
-    let DFT_MARGIN = 3;
+    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;

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

@@ -43,11 +43,7 @@ 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');
-                    }
+                    window.open('/printReport/' + sessionStorage.pageSize);
                 },
                 function(failRst){
                     sessionStorage.currentPageData = null;