Explorar o código

code merge for web直接打印

TonyKang %!s(int64=7) %!d(string=hai) anos
pai
achega
a2fe36edc3

+ 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;
+}