| 
					
				 | 
			
			
				@@ -60,7 +60,7 @@ let rptPrintHelper = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let isHtoV = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (pixelSize[0] > pixelSize[1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // changeHtoV(pagesData, pixelSize); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            // isHtoV = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            isHtoV = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         for (let idx = 0; idx < pagesData.items.length; idx++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let page = pagesData.items[idx]; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -69,7 +69,7 @@ let rptPrintHelper = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // let adjustY = 0.5 * ((idx + 1) % 2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             let adjustY = 0.5; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             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, adjustY, canvas, isHtoV)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                svgPageArr.push(buildCellSvg(cell, fonts, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND], offsetX, offsetY, adjustY, canvas, isHtoV, pixelSize)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             svgPageArr.push("</svg>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst.push(svgPageArr); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -78,36 +78,6 @@ let rptPrintHelper = { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function changeHtoV(pagesData, pixelSize) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    //坐标从横向变纵向 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (pixelSize[0] > pixelSize[1]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let tmpP = pixelSize[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        pixelSize[0] = pixelSize[1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        pixelSize[1] = tmpP; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let offsetX = pixelSize[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // let RotAngF = (90 * Math.PI / 180); //这里默认就是90度旋转 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let sinVal = 1; //sin 90度 = 1 不用算了 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let cosVal = 0; //cos 90度 = 0 不用算了 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (let page of pagesData.items) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (let cell of page.cells) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            rotateCellArea(cell[JV.PROP_AREA], sinVal, cosVal, offsetX); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function rotateCellArea(area, sinVal, cosVal, offsetX) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let Nx, Ny; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Nx = (area[JV.PROP_LEFT] * cosVal - area[JV.PROP_TOP] * sinVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ny = (area[JV.PROP_TOP] * cosVal + area[JV.PROP_LEFT] * sinVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    area[JV.PROP_LEFT] = Nx + offsetX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    area[JV.PROP_TOP] = Ny; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Nx = (area[JV.PROP_RIGHT] * cosVal - area[JV.PROP_BOTTOM] * sinVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    Ny = (area[JV.PROP_BOTTOM] * cosVal + area[JV.PROP_RIGHT] * sinVal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    area[JV.PROP_RIGHT] = Nx + offsetX; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    area[JV.PROP_BOTTOM] = Ny; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 function getActualBorderStyle(cell, styles, mergeBorderStyle, pageBorderArea, borderStr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let rst = styles[cell[JV.PROP_STYLE]][borderStr]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (mergeBorderStyle) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -128,7 +98,7 @@ function getActualBorderStyle(cell, styles, mergeBorderStyle, pageBorderArea, bo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return rst; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY, adjustY, canvas, isHtoV) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY, adjustY, canvas, isHtoV, pixelSize) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let rst = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let style = styles[cell[JV.PROP_STYLE]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let mergeBandStyle = null; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -144,163 +114,50 @@ function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBo 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         top = parseInt(cell[JV.PROP_AREA][JV.PROP_TOP]) + offsetY + adjustY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         bottom = parseInt(cell[JV.PROP_AREA][JV.PROP_BOTTOM]) + offsetY + adjustY 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    let HtoVStr = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if (isHtoV) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        HtoVStr = ` transform="translate(`+ pixelSize[1] + `,0) rotate(90)"`; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (style) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let leftBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_LEFT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // if (style[JV.PROP_LEFT] && parseFloat(style[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (leftBS && parseFloat(leftBS[JV.PROP_LINE_WEIGHT]) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst.push("<line x1='" + left + "' y1='" + top + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 "' x2='" + left + "' y2='" + bottom + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "' style='stroke:rgb(0,0,0);stroke-width:" + leftBS[JV.PROP_LINE_WEIGHT] +"'/>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "' style='stroke:rgb(0,0,0);stroke-width:" + leftBS[JV.PROP_LINE_WEIGHT] + "'" + HtoVStr + "/>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let rightBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_RIGHT); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // if (style[JV.PROP_RIGHT] && parseFloat(style[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (rightBS && parseFloat(rightBS[JV.PROP_LINE_WEIGHT]) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst.push("<line x1='" + right + "' y1='" + top + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 "' x2='" + right + "' y2='" + bottom + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "' style='stroke:rgb(0,0,0);stroke-width:" + rightBS[JV.PROP_LINE_WEIGHT] +"'/>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "' style='stroke:rgb(0,0,0);stroke-width:" + rightBS[JV.PROP_LINE_WEIGHT] +"'" + HtoVStr + "/>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let topBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_TOP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // if (style[JV.PROP_TOP] && parseFloat(style[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (topBS && parseFloat(topBS[JV.PROP_LINE_WEIGHT]) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst.push("<line x1='" + left + "' y1='" + top + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 "' x2='" + right + "' y2='" + top + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "' style='stroke:rgb(0,0,0);stroke-width:" + topBS[JV.PROP_LINE_WEIGHT] +"'/>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "' style='stroke:rgb(0,0,0);stroke-width:" + topBS[JV.PROP_LINE_WEIGHT] +"'" + HtoVStr + "/>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let bottomBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_BOTTOM); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // if (style[JV.PROP_BOTTOM] && parseFloat(style[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT]) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (bottomBS && parseFloat(bottomBS[JV.PROP_LINE_WEIGHT]) > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             rst.push("<line x1='" + left + "' y1='" + bottom + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 "' x2='" + right + "' y2='" + bottom + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                "' style='stroke:rgb(0,0,0);stroke-width:" + bottomBS[JV.PROP_LINE_WEIGHT] +"'/>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                "' style='stroke:rgb(0,0,0);stroke-width:" + bottomBS[JV.PROP_LINE_WEIGHT] +"'" + HtoVStr + "/>") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let control = cell[JV.PROP_CONTROL]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if (typeof control === 'string') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         control = controls[cell[JV.PROP_CONTROL]]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    buildText(rst, cell, font, control, offsetX, offsetY, adjustY, canvas, isHtoV); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    buildText(rst, cell, font, control, offsetX, offsetY, adjustY, canvas, isHtoV, HtoVStr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     return rst.join(""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function buildTextHtoV(destRst, cell, font, control, offsetX, offsetY, adjustY, canvas, isHtoV) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let orgFontHeight = parseInt(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let fontWeight = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold":"normal"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let fontStyle = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_ITALIC]] === 'T')?"italic":"normal"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let fontUnderline = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_UNDERLINE]] === 'T')?"underline":"normal"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    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 + adjustY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        bottom = parseInt(cell[JV.PROP_AREA][JV.PROP_BOTTOM]) + offsetY + adjustY, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        x = left, y = top, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        text_anchor = "start" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let value = cell[JV.PROP_VALUE]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (!(value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        value = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let values = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if (typeof value === "string") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        values = value.split("|"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        values = [value]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    // let stepHeight = (parseInt(cell[JV.PROP_AREA][JV.PROP_BOTTOM]) - parseInt(cell[JV.PROP_AREA][JV.PROP_TOP])) / values.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    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); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let area = [0,0,0,0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    area[JV.IDX_TOP] = top; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    area[JV.IDX_BOTTOM] = bottom; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    area[JV.IDX_LEFT] = left; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    area[JV.IDX_RIGHT] = right; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let height = bottom - top; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let ctx = canvas.getContext("2d"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    let inner_draw_text = function (textValue) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let dftFontHeight = orgFontHeight; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ctx.font = ((font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold ":"") + ((font[JV.FONT_PROPS[JV.FONT_PROP_IDX_ITALIC]] === 'T')?"italic":"") + dftFontHeight + "px " + font[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        function inner_build_text(innerTxt, innerArea) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let innerDftFontHeight = (dftFontHeight * 3 / 4); //SVG的字体与canvas的字体大小的切换, 不用考虑取整 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (control) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "top") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    y = innerArea[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.IDX_TOP]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "bottom") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    y = innerArea[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.IDX_BOTTOM]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === "center") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    y = Math.round((innerArea[JV.IDX_TOP] + innerArea[JV.IDX_BOTTOM] + innerDftFontHeight) / 2 ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                y = innerArea[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.IDX_TOP]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (font[JV.PROP_NAME] === "宋体") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                y--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            destRst.push("<text style='fill:black;font-family:" + font[JV.PROP_NAME] + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ";font-weight:" + fontWeight + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ";font-style:" + fontStyle + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ";text-decoration:" + fontUnderline + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                // ";text-decoration:normal" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                ";font-size:" + innerDftFontHeight + "pt' x='" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                x +"' y='" + y + "' text-anchor='" + text_anchor + "' xml:space='preserve'>" + innerTxt + "</text>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        let actLines = private_splitString(textValue, (area[JV.IDX_RIGHT] - area[JV.IDX_LEFT]), ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (actLines.length === 1 || (control && control.Shrink !== 'T')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            inner_build_text(textValue, area); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            while (true) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (dftFontHeight > 6) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    let lines = Math.floor((area[JV.IDX_BOTTOM] - area[JV.IDX_TOP]) / (dftFontHeight + JV.OUTPUT_OFFSET[JV.IDX_BOTTOM] + JV.OUTPUT_OFFSET[JV.IDX_TOP] + 4)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    lines = (lines === 0)?1:lines; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    actLines = private_splitString(textValue, (area[JV.IDX_RIGHT] - area[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.IDX_RIGHT]), ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    if (lines >= actLines.length) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        let aH = dftFontHeight + JV.OUTPUT_OFFSET[JV.IDX_BOTTOM] + JV.OUTPUT_OFFSET[JV.IDX_TOP] + 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        if ((aH * actLines.length) < (area[JV.IDX_BOTTOM] - area[JV.IDX_TOP]) && (control && control.Vertical !== 'top')) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            if (control.Vertical === 'bottom') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                area[JV.IDX_TOP] = area[JV.IDX_BOTTOM] - (aH * actLines.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                area[JV.IDX_TOP] = (area[JV.IDX_TOP] + area[JV.IDX_BOTTOM]) / 2 - (aH * actLines.length) / 2 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                                area[JV.IDX_BOTTOM] = area[JV.IDX_TOP] + (aH * actLines.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        let newArea = [], baseTop = area[JV.IDX_TOP]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        for (let ai = 0; ai < area.length; ai++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            newArea[ai] = area[ai]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        for (let lIdx = 0; lIdx < actLines.length; lIdx++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            newArea[JV.IDX_TOP] = Math.round(aH * lIdx + baseTop); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            newArea[JV.IDX_BOTTOM] = Math.round(aH * (lIdx + 1) + baseTop); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                            inner_build_text(actLines[lIdx], newArea); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        dftFontHeight--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        ctx.font = ((font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold ":"") + ((font[JV.FONT_PROPS[JV.FONT_PROP_IDX_ITALIC]] === 'T')?"italic":"") + dftFontHeight + "px " + font[JV.PROP_NAME]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    inner_build_text(textValue, area); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for (let vidx = 0; vidx < values.length; vidx++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        area[JV.IDX_TOP] = top + vidx * (height / values.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        area[JV.IDX_BOTTOM] = top + (vidx + 1) * (height / values.length); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        inner_draw_text(values[vidx]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, canvas, isHtoV) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, canvas, isHtoV, HtoVStr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let orgFontHeight = parseInt(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let fontWeight = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold":"normal"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     let fontStyle = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_ITALIC]] === 'T')?"italic":"normal"; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -368,7 +225,7 @@ function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, canv 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ";text-decoration:" + fontUnderline + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 // ";text-decoration:normal" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 ";font-size:" + innerDftFontHeight + "pt' x='" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                x +"' y='" + y + "' text-anchor='" + text_anchor + "' xml:space='preserve'>" + innerTxt + "</text>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                x +"' y='" + y + "' text-anchor='" + text_anchor + "' xml:space='preserve'" + HtoVStr + ">" + innerTxt + "</text>"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let actLines = private_splitString(textValue, (area[JV.IDX_RIGHT] - area[JV.IDX_LEFT]), ctx); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (actLines.length === 1 || (control && control.Shrink !== 'T')) { 
			 |