|
@@ -17,26 +17,26 @@ let JpcCanvasOutput = {
|
|
|
|
|
|
function private_setupAreaH(area, type, fontAngle, dftFontHeight, outputPoint) {
|
|
|
let lType = type;
|
|
|
- if (type != "left" && type != "right" && type != "center") lType = "left";
|
|
|
+ if (type !== "left" && type !== "right" && type !== "center") lType = "left";
|
|
|
switch (lType) {
|
|
|
case "left":
|
|
|
- if (fontAngle == JV.VERTICAL_ANGLE) {
|
|
|
+ if (fontAngle === JV.VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[1] = 1 * area[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
|
|
|
- } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
|
|
|
+ } else if (fontAngle === JV.ANTI_VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[1] = 1 * area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
|
|
|
} else outputPoint[0] = 1 * area[JV.IDX_LEFT] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
|
|
|
ctx.textAlign="start";
|
|
|
break;
|
|
|
case "right":
|
|
|
- if (fontAngle == JV.VERTICAL_ANGLE) {
|
|
|
+ if (fontAngle === JV.VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[1] = 1 * area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
|
|
|
- } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
|
|
|
+ } else if (fontAngle === JV.ANTI_VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[1] = 1 * area[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
|
|
|
} else outputPoint[0] = 1 * area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
|
|
|
ctx.textAlign="end";
|
|
|
break;
|
|
|
case "center":
|
|
|
- if (fontAngle == JV.VERTICAL_ANGLE || fontAngle == JV.ANTI_VERTICAL_ANGLE) {
|
|
|
+ if (fontAngle === JV.VERTICAL_ANGLE_INT || fontAngle === JV.ANTI_VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[1] = (1 * area[JV.IDX_TOP] + 1 * area[JV.IDX_BOTTOM]) / 2;
|
|
|
} else outputPoint[0] = (1 * area[JV.IDX_LEFT] + 1 * area[JV.IDX_RIGHT]) / 2;
|
|
|
ctx.textAlign="center";
|
|
@@ -45,26 +45,26 @@ let JpcCanvasOutput = {
|
|
|
}
|
|
|
function private_setupAreaV(area, type, fontAngle, dftFontHeight, outputPoint) {
|
|
|
let lType = type;
|
|
|
- if (type != "top" && type != "bottom" && type != "center") lType = "top";
|
|
|
+ if (type !== "top" && type !== "bottom" && type !== "center") lType = "top";
|
|
|
switch (lType) {
|
|
|
case "top":
|
|
|
- if (fontAngle == JV.VERTICAL_ANGLE) {
|
|
|
+ if (fontAngle === JV.VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[0] = 1 * area[JV.IDX_RIGHT] - dftFontHeight - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
|
- } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
|
|
|
+ } else if (fontAngle === JV.ANTI_VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[0] = 1 * area[JV.IDX_LEFT] + dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
|
} else outputPoint[1] = 1 * area[JV.IDX_TOP] + dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
|
break;
|
|
|
case "bottom":
|
|
|
- if (fontAngle == JV.VERTICAL_ANGLE) {
|
|
|
+ if (fontAngle === JV.VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[0] = 1 * area[JV.IDX_LEFT] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM];
|
|
|
- } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
|
|
|
+ } else if (fontAngle === JV.ANTI_VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[0] = 1 * area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM];
|
|
|
} else outputPoint[1] = 1 * area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM];
|
|
|
break;
|
|
|
case "center":
|
|
|
- if (fontAngle == JV.VERTICAL_ANGLE) {
|
|
|
+ if (fontAngle === JV.VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[0] = (1 * area[JV.IDX_LEFT] + 1 * area[JV.IDX_RIGHT] - dftFontHeight) / 2;
|
|
|
- } else if (fontAngle == JV.ANTI_VERTICAL_ANGLE) {
|
|
|
+ } else if (fontAngle === JV.ANTI_VERTICAL_ANGLE_INT) {
|
|
|
outputPoint[0] = (1 * area[JV.IDX_LEFT] + 1 * area[JV.IDX_RIGHT] + dftFontHeight) / 2;
|
|
|
} else outputPoint[1] = (1 * area[JV.IDX_TOP] + 1 * area[JV.IDX_BOTTOM] + dftFontHeight) / 2;
|
|
|
break;
|
|
@@ -74,31 +74,75 @@ let JpcCanvasOutput = {
|
|
|
let dftFontHeight = 12;
|
|
|
let output = [];
|
|
|
if (font) {
|
|
|
- dftFontHeight = 1 * font[JV.FONT_PROPS[1]];
|
|
|
+ dftFontHeight = parseFloat(font[JV.FONT_PROPS[1]]);
|
|
|
let dftOthers = "";
|
|
|
let dftFontBold = font[JV.FONT_PROPS[3]];
|
|
|
- if (dftFontBold && dftFontBold == 'T') {
|
|
|
+ if (dftFontBold && dftFontBold === 'T') {
|
|
|
dftOthers = "bold " + dftOthers ;
|
|
|
}
|
|
|
let dftFontItalic = font[JV.FONT_PROPS[4]];
|
|
|
- if (dftFontItalic && dftFontItalic == 'T') {
|
|
|
+ if (dftFontItalic && dftFontItalic === 'T') {
|
|
|
dftOthers = dftOthers + "italic ";
|
|
|
}
|
|
|
ctx.font = dftOthers + dftFontHeight + "px " + font[JV.PROP_NAME];
|
|
|
}
|
|
|
if (control) {
|
|
|
- private_setupAreaH(area, control.Horizon, font.FontAngle, dftFontHeight, output);
|
|
|
- private_setupAreaV(area, control.Vertical, font.FontAngle, dftFontHeight, output);
|
|
|
+ private_setupAreaH(area, control.Horizon, parseInt(font.FontAngle), dftFontHeight, output);
|
|
|
+ private_setupAreaV(area, control.Vertical, parseInt(font.FontAngle), dftFontHeight, output);
|
|
|
} else {
|
|
|
- private_setupAreaH(area, "left", font.FontAngle, dftFontHeight, output);
|
|
|
- private_setupAreaV(area, "bottom", font.FontAngle, dftFontHeight, output);
|
|
|
+ private_setupAreaH(area, "left", parseInt(font.FontAngle), dftFontHeight, output);
|
|
|
+ private_setupAreaV(area, "bottom", parseInt(font.FontAngle), dftFontHeight, output);
|
|
|
}
|
|
|
let w = area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - area[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
|
|
|
- if (font.FontAngle != "0") {
|
|
|
+ if ( parseInt(font.FontAngle) !== 0) {
|
|
|
w = area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] - area[JV.IDX_TOP] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
|
}
|
|
|
+
|
|
|
+ function private_drawUnderline() {
|
|
|
+ //A. 暂不支持角度; B. 坐标已经translate
|
|
|
+ //1. 计算下划线的相关坐标
|
|
|
+ let width = ctx.measureText(val).width;
|
|
|
+ let height = dftFontHeight;
|
|
|
+ // let startX = area[JV.IDX_LEFT], startY = area[JV.IDX_TOP], endX = area[JV.IDX_RIGHT], endY = area[JV.IDX_BOTTOM];
|
|
|
+ let startX = 0, startY = 0, endX = width, endY = startY;
|
|
|
+ if (control.Horizon === "left") {
|
|
|
+ // 无变化;
|
|
|
+ } else if (control.Horizon === "right") {
|
|
|
+ startX = Math.round(startX - width);
|
|
|
+ } else {
|
|
|
+ startX = Math.round(startX - width / 2);
|
|
|
+ }
|
|
|
+ endX = Math.round(startX + width);
|
|
|
+
|
|
|
+ if (control.Vertical === "top") {
|
|
|
+ startY += JV.OUTPUT_OFFSET[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.IDX_BOTTOM];
|
|
|
+ } else if (control.Vertical === "bottom") {
|
|
|
+ // startY = Math.round(startY);
|
|
|
+ startY += JV.OUTPUT_OFFSET[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.IDX_BOTTOM];
|
|
|
+ } else {
|
|
|
+ startY = Math.round(height / 2) - JV.OUTPUT_OFFSET[JV.IDX_TOP] - JV.OUTPUT_OFFSET[JV.IDX_BOTTOM];
|
|
|
+ // startY += JV.OUTPUT_OFFSET[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.IDX_BOTTOM];
|
|
|
+ }
|
|
|
+ endY = Math.round(startY);
|
|
|
+ //2. 画线
|
|
|
+ // ctx.save();
|
|
|
+ if ( output[1] !== Math.round(output[1])) {
|
|
|
+ ctx.translate(0,0.5);
|
|
|
+ }
|
|
|
+ ctx.beginPath();
|
|
|
+ ctx.moveTo(startX, startY);
|
|
|
+ ctx.lineWidth = 1;
|
|
|
+ ctx.strokeStyle = "BLACK";
|
|
|
+ ctx.lineTo(endX, endY);
|
|
|
+ ctx.stroke();
|
|
|
+ // ctx.restore();
|
|
|
+ }
|
|
|
+
|
|
|
ctx.save();
|
|
|
ctx.translate(output[0], output[1]);
|
|
|
+ if (font[JV.FONT_PROPS[5]] === 'T' && parseInt(font.FontAngle) === 0) {
|
|
|
+ private_drawUnderline();
|
|
|
+ }
|
|
|
if (font.FontAngle === JV.VERTICAL_ANGLE) {
|
|
|
ctx.rotate(Math.PI/2);
|
|
|
} else if (font.FontAngle === JV.ANTI_VERTICAL_ANGLE) {
|
|
@@ -121,8 +165,19 @@ let JpcCanvasOutput = {
|
|
|
function private_drawCellText(cell, fonts, controls) {
|
|
|
if (cell[JV.PROP_VALUE]) {
|
|
|
let values = ("" + cell[JV.PROP_VALUE]).split('|');
|
|
|
- let font = fonts[cell[JV.PROP_FONT]];
|
|
|
- let control = controls[cell[JV.PROP_CONTROL]];
|
|
|
+ let font = null;
|
|
|
+ if (typeof cell[JV.PROP_FONT] === "string") {
|
|
|
+ font = fonts[cell[JV.PROP_FONT]];
|
|
|
+ } else {
|
|
|
+ font = cell[JV.PROP_FONT];
|
|
|
+ }
|
|
|
+ //let control = controls[cell[JV.PROP_CONTROL]];
|
|
|
+ let control = null;
|
|
|
+ if (typeof cell[JV.PROP_CONTROL] === "string") {
|
|
|
+ control = controls[cell[JV.PROP_CONTROL]];
|
|
|
+ } else {
|
|
|
+ control = cell[JV.PROP_CONTROL];
|
|
|
+ }
|
|
|
if (control.ShowZero === "F") {
|
|
|
if (parseFloat(cell[JV.PROP_VALUE]) === 0.0) {
|
|
|
values = [""];
|