Explorar o código

打印预览优化

TonyKang %!s(int64=3) %!d(string=hai) anos
pai
achega
79c9e54a34

+ 1 - 5
app/controller/report_controller.js

@@ -334,11 +334,7 @@ module.exports = app => {
                     size: pageSize,
                     // orientation: params.orientation,
                 };
-                if (pageSize === 'A3') {
-                    await ctx.render('report/rpt_printA3.ejs', renderData);
-                } else {
-                    await ctx.render('report/rpt_print.ejs', renderData);
-                }
+                await ctx.render('report/rpt_print.ejs', renderData);
             } catch (err) {
                 this.log(err);
                 console.log(err);

+ 3 - 3
app/public/report/js/jpc_output_value_define.js

@@ -58,9 +58,9 @@ let JV = {
     FONT_PROP_IDX_STRIKEOUT: 6,
     FONT_PROP_IDX_ANGLE: 7,
 
-    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]],
 
     OUTPUT_OFFSET: [2,2,1,3],
     OFFSET_IDX_LEFT: 0,

+ 14 - 0
app/public/report/js/rpt_preview_common.js

@@ -127,6 +127,19 @@ function printPageLoading_bk() {
 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;
@@ -135,6 +148,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;

+ 2 - 10
app/public/report/js/rpt_print.js

@@ -29,11 +29,7 @@ let rptPrintHelper = {
             sessionStorage.STAGE_AUDIT_ORG = JSON.stringify(STAGE_AUDIT_ORG);
             sessionStorage.current_stage_id = getStageId();
             // sessionStorage.STAGE_AUDIT = JSON.stringify(STAGE_AUDIT);
-            if (sessionStorage.pageSize === 'A3') {
-                window.open('/printReport/A3');
-            } else {
-                window.open('/printReport/A4');
-            }
+            window.open('/printReport/' + sessionStorage.pageSize);
         }
     },
     preview_bk: async function () {
@@ -98,11 +94,7 @@ let rptPrintHelper = {
                     sessionStorage.scaleFactor = 1;
                     sessionStorage.closeWaterMark = getCloseWatermark();
                     sessionStorage.waterMarkStr = COMMON_WATER_MARK_PIC_DATA;
-                    if (sessionStorage.pageSize === 'A3') {
-                        window.open('/printReport/A3');
-                    } else {
-                        window.open('/printReport/A4');
-                    }
+                    window.open('/printReport/' + sessionStorage.pageSize);
                 },
                 function(failRst){
                     sessionStorage.currentPageData = null;

+ 8 - 7
app/reports/rpt_component/jpc_value_define.js

@@ -297,11 +297,12 @@ module.exports = {
     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],
@@ -337,9 +338,9 @@ module.exports = {
     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,
 

+ 6 - 0
app/view/report/index.ejs

@@ -95,6 +95,12 @@
                                             <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="btnGroupDrop1">
                                                 <a class="dropdown-item" id="hrefRptPageSize" 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>

+ 52 - 9
app/view/report/rpt_print.ejs

@@ -25,19 +25,45 @@
         page-break-before: auto;
         page-break-after: auto;
     }
+    <% 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 === 'A5') { %>
+    @page {
+        size: A5 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: A4 portrait;
-        margin-top: 0cm;
-        margin-bottom: 0cm;
-        margin-left: 0mm;
-        margin-right: 0mm
+        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;
-            margin-bottom: 0mm;
-            margin-left: 0mm;
-            margin-right: 0mm
+            margin-top: 0mm; margin-bottom: 0mm; margin-left: 0mm; margin-right: 0mm
         }
     }
     body {page: page}
@@ -65,5 +91,22 @@
     </div>
 </body>
 <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>
 </html>

+ 0 - 49
app/view/report/rpt_printA3.ejs

@@ -1,49 +0,0 @@
-<!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/js/common_ajax.js"></script>
-    <script type="text/javascript" src="/public/report/js/jpc_output_value_define.js"></script>
-    <script type="text/javascript" src="/public/report/js/jpc_output.js"></script>
-    <script type="text/javascript" src="/public/report/js/rpt_print.js"></script>
-    <script type="text/javascript" src="/public/report/js/rpt_signature.js"></script>
-    <script type="text/javascript" src="/public/report/js/rpt_preview_common.js"></script>
-    <link rel="shortcut icon" href="/public/images/favicon.ico">
-</head>
-<style type="text/css">
-    .pageBreak {
-        page-break-before: auto;
-        page-break-after: auto;
-    }
-    @page {
-        size: A3 portrait;
-        margin-top: 0cm;
-        margin-bottom: 0cm;
-        margin-left: 0mm;
-        margin-right: 0mm
-    }
-    @media print {
-        body {
-            margin-top: 0mm;
-            margin-bottom: 0mm;
-            margin-left: 0mm;
-            margin-right: 0mm
-        }
-    }
-    body {page: page}
-    div {page: page}
-</style>
-<body onload="printPageLoading()" onbeforeunload="printPageClosing()">
-    <canvas id="chkCanvas" style="display:none"></canvas>
-    <div class="panel-body" id="print_preview_div" style="display:block">
-        <button class="btn btn-outline-primary btn-sm" type="button" onclick="printPage()">
-            <i class="fa fa-print"></i>
-            打印 <span id="checkCountPrint" class="badge badge-primary"></span>
-        </button>
-    </div>
-</body>
-<SCRIPT type="text/javascript">
-</SCRIPT>
-</html>