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