Browse Source

直接web打印

TonyKang 7 years ago
parent
commit
4d9a7ae652

+ 0 - 24
modules/reports/rpt_component/helper/jpc_helper_common.js

@@ -74,30 +74,6 @@ let JpcCommonHelper = {
         }
         return arrDPI;
     },
-    // getBrowerScreenDPI: function() {
-    //     let me = this, arrDPI = [];
-    //     if (!me.commonConstant.resolution) {
-    //         if (window) {
-    //             if (window.screen.deviceXDPI != undefined) {
-    //                 arrDPI.push(window.screen.deviceXDPI);
-    //                 arrDPI.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);
-    //                 arrDPI.push(parseInt(tmpNode.offsetWidth));
-    //                 arrDPI.push(parseInt(tmpNode.offsetHeight));
-    //                 tmpNode.parentNode.removeChild(tmpNode);
-    //             }
-    //         } else {
-    //             arrDPI = [96,96];
-    //         }
-    //         me.commonConstant.resolution = arrDPI;
-    //     } else {
-    //         arrDPI = me.commonConstant.resolution;
-    //     }
-    //     return arrDPI;
-    // },
     getUnitFactor: function(rptTpl) {
         let me = this;
         return me.translateUnit(rptTpl[JV.NODE_MAIN_INFO][JV.PROP_UNITS]);

+ 94 - 0
modules/reports/util/rpt_svg_util.js

@@ -0,0 +1,94 @@
+/**
+ * Created by Tony on 2018/6/27.
+ * 报表直接打印需要
+ */
+
+let JV = require('../rpt_component/jpc_value_define');
+const SCREEN_DPI = [96,96];
+
+module.exports = {
+    exportSvgStr: function (pagesData, callback) {
+        let styles = pagesData[JV.NODE_STYLE_COLLECTION],
+            fonts = pagesData[JV.NODE_FONT_COLLECTION],
+            controls = pagesData[JV.NODE_CONTROL_COLLECTION]
+        ;
+        for (let page of pagesData.items) {
+            let svgPageArr = [], pixelSize = getPixelSize(pagesData);
+            svgPageArr.push("<svg width='" + pixelSize[0] + "' height='" + pixelSize[1] + "'>");
+            for (let cell of page.cells) {
+                svgPageArr.push(buildCellSvg(cell, fonts, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER]));
+            }
+            svgPageArr.push("</svg>");
+        }
+    }
+}
+
+function buildCellSvg(cell, fonts, styles, controls, mergeBorder) {
+    let rst = [];
+    let style = styles[cell[JV.PROP_STYLE]];
+    if (style) {
+        if (style[JV.PROP_LEFT] && parseFloat(style[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]) > 0) {
+            rst.push("<line x1='" + cell[JV.PROP_AREA][JV.PROP_LEFT] + "' y1='" + cell[JV.PROP_AREA][JV.PROP_TOP] +
+                "' x2='" + cell[JV.PROP_AREA][JV.PROP_LEFT] + "' y2='" + cell[JV.PROP_AREA][JV.PROP_BOTTOM] +
+                "' style='stroke:rgb(0,0,0);stroke-width:1'/>")
+        }
+        if (style[JV.PROP_RIGHT] && parseFloat(style[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]) > 0) {
+            rst.push("<line x1='" + cell[JV.PROP_AREA][JV.PROP_RIGHT] + "' y1='" + cell[JV.PROP_AREA][JV.PROP_TOP] +
+                "' x2='" + cell[JV.PROP_AREA][JV.PROP_RIGHT] + "' y2='" + cell[JV.PROP_AREA][JV.PROP_BOTTOM] +
+                "' style='stroke:rgb(0,0,0);stroke-width:1'/>")
+        }
+        if (style[JV.PROP_TOP] && parseFloat(style[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]) > 0) {
+            rst.push("<line x1='" + cell[JV.PROP_AREA][JV.PROP_LEFT] + "' y1='" + cell[JV.PROP_AREA][JV.PROP_TOP] +
+                "' x2='" + cell[JV.PROP_AREA][JV.PROP_RIGHT] + "' y2='" + cell[JV.PROP_AREA][JV.PROP_TOP] +
+                "' style='stroke:rgb(0,0,0);stroke-width:1'/>")
+        }
+        if (style[JV.PROP_BOTTOM] && parseFloat(style[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT]) > 0) {
+            rst.push("<line x1='" + cell[JV.PROP_AREA][JV.PROP_LEFT] + "' y1='" + cell[JV.PROP_AREA][JV.PROP_BOTTOM] +
+                "' x2='" + cell[JV.PROP_AREA][JV.PROP_RIGHT] + "' y2='" + cell[JV.PROP_AREA][JV.PROP_BOTTOM] +
+                "' style='stroke:rgb(0,0,0);stroke-width:1'/>")
+        }
+    }
+    let font = cell[JV.PROP_FONT];
+    if (typeof font === 'string') {
+        font = fonts[cell[JV.PROP_FONT]];
+    }
+    let fontsize = parseInt(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]);
+    let left = parseInt(cell[JV.PROP_AREA][JV.PROP_LEFT]),
+        right = parseInt(cell[JV.PROP_AREA][JV.PROP_RIGHT]),
+        top = parseInt(cell[JV.PROP_AREA][JV.PROP_TOP]),
+        bottom = parseInt(cell[JV.PROP_AREA][JV.PROP_BOTTOM]),
+        x = left, y = top,
+        text_anchor = "start"
+    ;
+    let control = controls[cell[JV.PROP_CONTROL]];
+    if (control) {
+        if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] === "left") {
+            text_anchor = "start";
+            x = left + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
+        } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] === "right") {
+            text_anchor = "end";
+            x = right - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
+        } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] === "center") {
+            text_anchor = "middle";
+            x = Math.round((left + right) / 2);
+        }
+        if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "top") {
+            y = top + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
+        } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "bottom") {
+            y = bottom - fontsize - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM];
+        } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "center") {
+            y = Math.round((top + bottom + fontsize) / 2 );
+        }
+    }
+    rst.push("<text style='fill:black;font-size:" + fontsize + "pt' x='" + x +"' y='" + y + "'>" + cell[JV.PROP_VALUE] + "</text>");
+    return rst.join();
+}
+
+function getPixelSize(pagesData) {
+    let rst = [793,1122];
+    if (pagesData[JV.NODE_PAGE_INFO] && pagesData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE]) {
+        rst[0] = Math.round(SCREEN_DPI[0] * pagesData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][0]);
+        rst[1] = Math.round(SCREEN_DPI[1] * pagesData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][1]);
+    }
+    return rst;
+}

+ 5 - 0
public/web/rpt_value_define.js

@@ -197,6 +197,11 @@ const JV = {
     PAGE_STATUS: ["EveryPage","FirstPage", "LastPage", "SegmentStart", "SegmentEnd", "Group", "CrossRowEnd", "CrossColEnd"],
 
     CONTROL_PROPS: ["Shrink", "ShowZero", "Horizon", "Vertical", "Wrap"],
+    CONTROL_PROP_IDX_SHRINK: 0,
+    CONTROL_PROP_IDX_SHOW_ZERO: 1,
+    CONTROL_PROP_IDX_HORIZON: 2,
+    CONTROL_PROP_IDX_VERTICAL: 3,
+    CONTROL_PROP_IDX_WRAP: 4,
     BORDER_STYLE_PROPS: ["LineWeight", "DashStyle", "Color"],
     PROP_LINE_WEIGHT: "LineWeight",
     PROP_DASH_STYLE: "DashStyle",

+ 61 - 15
web/building_saas/report/html/rpt_print.html

@@ -13,21 +13,34 @@
         page-break-before: auto;
         page-break-after: auto;
     }
-</style><script type="text/javascript" src="/web/building_saas/report/js/jpc_output_value_define.js"></script>
+</style>
+<style type="text/css">
+    svg{
+        width: 1122px;
+        height: 1122px;
+    }
+</style>
+<script type="text/javascript" src="/web/building_saas/report/js/jpc_output_value_define.js"></script>
 <body onload="loading()" onbeforeunload="closing()">
 </body>
 <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">
     let canvasArr = [];
     function loading() {
         if (sessionStorage.currentPageData) {
             let pageData = JSON.parse(sessionStorage.currentPageData);
+//            let scaleFactor = parseInt(sessionStorage.scaleFactor);
+            let scaleFactor = 1;
             $(document).attr("title", pageData[JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
-            let pageHeight = 793, pageWidth = 1122;
+            let orgHeight = 793, orgWidth = 1122;
+            let pageHeight = orgHeight * scaleFactor, pageWidth = orgWidth * scaleFactor;
             if (sessionStorage.pageSize === 'A3') {
-                pageHeight = 1122;
-                pageWidth = 793 * 2;
+                pageHeight = orgWidth * scaleFactor;
+                pageWidth = orgHeight * 2 * scaleFactor;
+                orgHeight = 1122;
+                orgWidth = 793 * 2;
             } else if (sessionStorage.pageSize === '自定义') {
                 //自定义
             }
@@ -35,21 +48,54 @@
                 let tmpInt = pageHeight;
                 pageHeight = pageWidth;
                 pageWidth = tmpInt;
+
+                tmpInt = orgWidth;
+                orgWidth = orgHeight;
+                orgHeight = tmpInt;
             }
+//            for (let i = 0; i < pageData.items.length; i++) {
+//                let div = $('<div class="pageBreak"><canvas width="' + pageWidth + '" height="' + pageHeight + '"></canvas></div>');
+//                $("body").append(div);
+//            }
+//            $(document.body).find("div").each(function(index,element){
+//                $(element).find("canvas").each(function(cIdx,elementCanvas){
+//                    canvasArr.push(elementCanvas);
+//                });
+//            });
+//            JpcCanvasOutput.scaleFactor = scaleFactor;
+//            JpcCanvasOutput.resetFonts(pageData[JV.NODE_FONT_COLLECTION]);
+//            for (let i = 0; i < canvasArr.length; i++) {
+//                JpcCanvasOutput.offsetX = -30;
+//                JpcCanvasOutput.offsetY = -30;
+//                JpcCanvasOutput.drawToCanvas(pageData, canvasArr[i], i+1);
+//            }
+
+//            let imgDataArr = [];
+//            for (let canvas of canvasArr) {
+//                imgDataArr.push(canvas.toDataURL());
+//            }
+//            let imgIdx = 0;
+//            $(document.body).find("div").each(function(index,element){
+//                let img = document.createElement('img');
+//                img.src = imgDataArr[imgIdx];
+//                img.height = orgHeight;
+//                img.width = orgWidth;
+//                imgIdx++;
+//                element.appendChild(img);
+//                $(element).find("canvas").each(function(cIdx,elementCanvas){
+//                    elementCanvas.style.display = "none";
+//                });
+//            });
+
+            let svgArr = rptPrintHelper.buildSvgArr(pageData, -30, -30);
             for (let i = 0; i < pageData.items.length; i++) {
-                let div = $('<div class="pageBreak"><canvas width="' + pageWidth + '" height="' + pageHeight + '"></canvas></div>');
+                let div = $('<div class="pageBreak"></div>');
+//                console.log()
+//                div.append(svgArr[i]);
+                div.append($(svgArr[i].join("")));
                 $("body").append(div);
             }
-            $(document.body).find("div").each(function(index,element){
-                $(element).find("canvas").each(function(cIdx,elementCanvas){
-                    canvasArr.push(elementCanvas);
-                });
-            });
-            for (let i = 0; i < canvasArr.length; i++) {
-                JpcCanvasOutput.offsetX = -10;
-                JpcCanvasOutput.offsetY = -20;
-                JpcCanvasOutput.drawToCanvas(pageData, canvasArr[i], i+1);
-            }
+
             window.print();
             //document.execCommand("print");
         } else {

+ 25 - 1
web/building_saas/report/js/jpc_output.js

@@ -4,6 +4,7 @@
 let JpcCanvasOutput = {
     offsetX: 10,
     offsetY: 10,
+    scaleFactor: 1,
     cleanCanvas: function (canvas) {
         let ctx = canvas.getContext("2d");
         ctx.save();
@@ -11,6 +12,14 @@ let JpcCanvasOutput = {
         ctx.clearRect(0,0, canvas.width, canvas.height);
         ctx.restore();
     },
+    resetFonts: function(rptFonts) {
+        let me = JpcCanvasOutput;
+        if (me.scaleFactor !== 1) {
+            for (let key in rptFonts) {
+                rptFonts[key]["FontHeight"] = me.scaleFactor * rptFonts[key]["FontHeight"];
+            }
+        }
+    },
     drawToCanvas : function(pageObj, canvas, pageIdx) {
         let me = this;
         let ctx = canvas.getContext("2d");
@@ -252,6 +261,17 @@ let JpcCanvasOutput = {
             }
             return rst;
         }
+        function private_resetArea(area) {
+            area[JV.PROP_LEFT] = me.scaleFactor * area[JV.PROP_LEFT];
+            area[JV.PROP_RIGHT] = me.scaleFactor * area[JV.PROP_RIGHT];
+            area[JV.PROP_TOP] = me.scaleFactor * area[JV.PROP_TOP];
+            area[JV.PROP_BOTTOM] = me.scaleFactor * area[JV.PROP_BOTTOM];
+        }
+        function private_resetCellFont(cell) {
+            if (typeof cell.font !== "string") {
+                cell.font["FontHeight"] = me.scaleFactor * cell.font["FontHeight"];
+            }
+        }
 
         if (pageObj && pageObj.items.length > 0 && canvas && pageObj.items.length >= pageIdx) {
             let page = pageObj.items[pageIdx - 1],
@@ -266,9 +286,13 @@ let JpcCanvasOutput = {
                 newPageMergeBand[JV.PROP_TOP] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_TOP];
                 newPageMergeBand[JV.PROP_BOTTOM] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_BOTTOM];
             }
+            private_resetArea(newPageMergeBand);
             for (let j = 0; j < page.cells.length; j++) {
                 let cell = page.cells[j];
-                // private_drawCell(cell, fonts, styles, controls, mergedBand);
+                if (me.scaleFactor !== 1) {
+                    private_resetCellFont(cell);
+                    private_resetArea(cell[JV.PROP_AREA]);
+                }
                 private_drawCell(cell, fonts, styles, controls, newPageMergeBand);
             }
         }

+ 13 - 0
web/building_saas/report/js/jpc_output_value_define.js

@@ -34,11 +34,24 @@ let JV = {
     IDX_BOTTOM: 3,
 
     CONTROL_PROPS: ["Shrink", "ShowZero", "Horizon", "Vertical", "Wrap"],
+    CONTROL_PROP_IDX_SHRINK: 0,
+    CONTROL_PROP_IDX_SHOW_ZERO: 1,
+    CONTROL_PROP_IDX_HORIZON: 2,
+    CONTROL_PROP_IDX_VERTICAL: 3,
+    CONTROL_PROP_IDX_WRAP: 4,
     BORDER_STYLE_PROPS: ["LineWeight", "DashStyle", "Color"],
     PROP_LINE_WEIGHT: "LineWeight",
     PROP_DASH_STYLE: "DashStyle",
     PROP_COLOR: "Color",
     FONT_PROPS: ["Name", "FontHeight", "FontColor", "FontBold", "FontItalic", "FontUnderline", "FontStrikeOut", "FontAngle"],
+    FONT_PROP_IDX_NAME: 0,
+    FONT_PROP_IDX_HEIGHT: 1,
+    FONT_PROP_IDX_COLOR: 2,
+    FONT_PROP_IDX_BOLD: 3,
+    FONT_PROP_IDX_ITALIC: 4,
+    FONT_PROP_IDX_UNDERLINE: 5,
+    FONT_PROP_IDX_STRIKEOUT: 6,
+    FONT_PROP_IDX_ANGLE: 7,
 
     OUTPUT_OFFSET: [2,2,1,3],
     OFFSET_IDX_LEFT: 0,

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

@@ -9,6 +9,7 @@ let rptPrintHelper = {
             sessionStorage.currentPageData = JSON.stringify(zTreeOprObj.currentRptPageRst);
             sessionStorage.pageSize = rptControlObj.getCurrentPageSize();
             sessionStorage.orientation = rptControlObj.getCurrentOrientation();
+            sessionStorage.scaleFactor = 1;
             window.open('/rpt_print');
         } else {
             sessionStorage.currentPageData = null;
@@ -16,5 +17,101 @@ let rptPrintHelper = {
     },
     print: function () {
         //
+    },
+    buildSvgArr: function (pagesData, offsetX, offsetY) {
+        let styles = pagesData[JV.NODE_STYLE_COLLECTION],
+            fonts = pagesData[JV.NODE_FONT_COLLECTION],
+            controls = pagesData[JV.NODE_CONTROL_COLLECTION]
+        ;
+        let rst = [];
+        for (let page of pagesData.items) {
+            let svgPageArr = [], pixelSize = getPixelSize(pagesData);
+            svgPageArr.push("<svg width='" + pixelSize[0] + "' height='" + pixelSize[1] + "'>");
+            for (let cell of page.cells) {
+                svgPageArr.push(buildCellSvg(cell, fonts, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND], offsetX, offsetY));
+            }
+            svgPageArr.push("</svg>");
+            rst.push(svgPageArr);
+        }
+        return rst;
+    }
+};
+
+function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY) {
+    let rst = [];
+    let style = styles[cell[JV.PROP_STYLE]];
+    let mergeBandStyle = null;
+    if (rptMergeBorder) {
+        mergeBandStyle = styles[rptMergeBorder[JV.PROP_STYLE]];
+    }
+    let left = parseInt(cell[JV.PROP_AREA][JV.PROP_LEFT]) + offsetX + 0.5,
+        right = parseInt(cell[JV.PROP_AREA][JV.PROP_RIGHT]) + offsetX + 0.5,
+        top = parseInt(cell[JV.PROP_AREA][JV.PROP_TOP]) + offsetY + 0.5,
+        bottom = parseInt(cell[JV.PROP_AREA][JV.PROP_BOTTOM]) + offsetY + 0.5,
+        x = left, y = top,
+        text_anchor = "start"
+    ;
+    if (style) {
+        if (style[JV.PROP_LEFT] && parseFloat(style[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]) > 0) {
+            rst.push("<line x1='" + left + "' y1='" + top +
+                "' x2='" + left + "' y2='" + bottom +
+                "' style='stroke:rgb(0,0,0);stroke-width:1'/>")
+        }
+        if (style[JV.PROP_RIGHT] && parseFloat(style[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]) > 0) {
+            rst.push("<line x1='" + right + "' y1='" + top +
+                "' x2='" + right + "' y2='" + bottom +
+                "' style='stroke:rgb(0,0,0);stroke-width:1'/>")
+        }
+        if (style[JV.PROP_TOP] && parseFloat(style[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]) > 0) {
+            rst.push("<line x1='" + left + "' y1='" + top +
+                "' x2='" + right + "' y2='" + top +
+                "' style='stroke:rgb(0,0,0);stroke-width:1'/>")
+        }
+        if (style[JV.PROP_BOTTOM] && parseFloat(style[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT]) > 0) {
+            rst.push("<line x1='" + left + "' y1='" + bottom +
+                "' x2='" + right + "' y2='" + bottom +
+                "' style='stroke:rgb(0,0,0);stroke-width:1'/>")
+        }
+    }
+    let font = cell[JV.PROP_FONT];
+    if (typeof font === 'string') {
+        font = fonts[cell[JV.PROP_FONT]];
+    }
+    let fontsize = Math.round(parseInt(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]) * 3 / 4);
+    let fontWeight = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold":"normal";
+    let control = controls[cell[JV.PROP_CONTROL]];
+    if (control) {
+        if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] === "left") {
+            text_anchor = "start";
+            x = left + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
+        } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] === "right") {
+            text_anchor = "end";
+            x = right - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
+        } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]] === "center") {
+            text_anchor = "middle";
+            x = Math.round((left + right) / 2);
+        }
+        if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "top") {
+            y = top + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
+        } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "bottom") {
+            y = bottom - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM];
+        } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "center") {
+            y = Math.round((top + bottom + fontsize) / 2 );
+        }
+    }
+    rst.push("<text style='fill:black;font-family:" + font[JV.PROP_NAME] +
+        ";font-weight:" + fontWeight +
+        ";font-size:" + fontsize + "pt' x='" +
+        x +"' y='" + y + "' text-anchor='" + text_anchor + "'>" + cell[JV.PROP_VALUE] + "</text>");
+    return rst.join("");
+}
+
+function getPixelSize(pagesData) {
+    let rst = [793,1122];
+    let SCREEN_DPI = [96,96];
+    if (pagesData[JV.NODE_PAGE_INFO] && pagesData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE]) {
+        rst[0] = Math.round(SCREEN_DPI[0] * pagesData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][0]);
+        rst[1] = Math.round(SCREEN_DPI[1] * pagesData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][1]);
     }
-};
+    return rst;
+}