|
|
@@ -125,6 +125,13 @@ let JpcCanvasOutput = {
|
|
|
}
|
|
|
return rst;
|
|
|
}
|
|
|
+ function _chkIfCloseOutput(control, actLines, area, fontHeight) {
|
|
|
+ let rst = false;
|
|
|
+ if (control.CloseOutput === 'T' && actLines > 1) {
|
|
|
+ rst = true;
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
function private_drawText(val, area, font, control) {
|
|
|
let dftFontHeight = 12;
|
|
|
let output = [];
|
|
|
@@ -269,10 +276,11 @@ let JpcCanvasOutput = {
|
|
|
//根据control的 自动折行 及 缩放优先 这俩属性 来分解cell value
|
|
|
if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_WRAP]] === 'T' && control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_SHRINK_FIRST]] !== 'T') {
|
|
|
let vals = [];
|
|
|
- let validAreaTxtWidth = cell[JV.PROP_AREA][JV.PROP_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
|
|
|
+ let validAreaTxtWidth = cell[JV.PROP_AREA][JV.PROP_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT] - 1;
|
|
|
for (let val of orgValues) {
|
|
|
let actW = ctx2D.measureText(val).width;
|
|
|
- if (actW > validAreaTxtWidth) {
|
|
|
+ if (actW > (validAreaTxtWidth - 4)) {
|
|
|
+ //减4个像素是考虑到导出excel的情况
|
|
|
vals = vals.concat(private_splitString(val, validAreaTxtWidth, ctx2D));
|
|
|
} else {
|
|
|
vals.push(val);
|
|
|
@@ -312,44 +320,52 @@ let JpcCanvasOutput = {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (font) {
|
|
|
- let dftFontHeight = parseFloat(font[JV.FONT_PROPS[1]]);
|
|
|
- let dftOthers = "";
|
|
|
- let dftFontBold = font[JV.FONT_PROPS[3]];
|
|
|
- if (dftFontBold && dftFontBold === 'T') {
|
|
|
- dftOthers = "bold " + dftOthers ;
|
|
|
- }
|
|
|
- let dftFontItalic = font[JV.FONT_PROPS[4]];
|
|
|
- if (dftFontItalic && dftFontItalic === 'T') {
|
|
|
- dftOthers = dftOthers + "italic ";
|
|
|
- }
|
|
|
- dftFontHeight = me.scaleFactor * dftFontHeight;
|
|
|
- ctx.font = dftOthers + dftFontHeight + "px " + font[JV.PROP_NAME];
|
|
|
+ let dftFontHeight = parseFloat(font[JV.FONT_PROPS[1]]);
|
|
|
+ let dftOthers = "";
|
|
|
+ let dftFontBold = font[JV.FONT_PROPS[3]];
|
|
|
+ if (dftFontBold && dftFontBold === 'T') {
|
|
|
+ dftOthers = "bold " + dftOthers ;
|
|
|
+ }
|
|
|
+ let dftFontItalic = font[JV.FONT_PROPS[4]];
|
|
|
+ if (dftFontItalic && dftFontItalic === 'T') {
|
|
|
+ dftOthers = dftOthers + "italic ";
|
|
|
}
|
|
|
+ dftFontHeight = me.scaleFactor * dftFontHeight;
|
|
|
+ ctx.font = dftOthers + dftFontHeight + "px " + font[JV.PROP_NAME];
|
|
|
+ // if (font) {
|
|
|
+ // }
|
|
|
_splitValues(cell, control, values, ctx);
|
|
|
|
|
|
let height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
let area = [cell[JV.PROP_AREA][JV.PROP_LEFT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + me.offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + me.offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + me.offsetY];
|
|
|
let ah = height;
|
|
|
let restTopH = 0, restBottomH = 0;
|
|
|
- if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_CLOSE_OUTPUT]] === 'T') {
|
|
|
- ah = (parseFloat(font[JV.FONT_PROPS[1]]) + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM]) * values.length;
|
|
|
- let restH = height - ah;
|
|
|
- if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === 'center') {
|
|
|
- restTopH = restH / 2;
|
|
|
- restBottomH = restH / 2;
|
|
|
- } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === 'bottom') {
|
|
|
- restBottomH = restH;
|
|
|
- } else {
|
|
|
- restTopH = restH;
|
|
|
- }
|
|
|
+ // if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_CLOSE_OUTPUT]] === 'T') {
|
|
|
+ // ah = (parseFloat(font[JV.FONT_PROPS[1]]) + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM]) * values.length;
|
|
|
+ // let restH = height - ah;
|
|
|
+ // if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === 'center') {
|
|
|
+ // restTopH = restH / 2;
|
|
|
+ // restBottomH = restH / 2;
|
|
|
+ // } else if (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_VERTICAL]] === 'bottom') {
|
|
|
+ // restBottomH = restH;
|
|
|
+ // } else {
|
|
|
+ // restTopH = restH;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ //这里增加 ‘紧密输出’ 处理:在cell的输出空间划分出上下空间,中间行的输出间隔只有4个像素(要考虑与导出excel一致性,不能少了)
|
|
|
+ const isCloseOutput = _chkIfCloseOutput(control, values.length, area, dftFontHeight);
|
|
|
+ let closeTopOffset = 0;
|
|
|
+ if (isCloseOutput) {
|
|
|
+ closeTopOffset = (height - (dftFontHeight + 4) * values.length) / 2;
|
|
|
}
|
|
|
for (let i = 0; i < values.length; i++) {
|
|
|
- // area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (height / values.length) + me.offsetY;
|
|
|
- // area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (height / values.length) + me.offsetY;
|
|
|
- area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (ah / values.length) + me.offsetY + restTopH;
|
|
|
- // area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (ah / values.length) + me.offsetY + restTopH;
|
|
|
- area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (ah / values.length) + me.offsetY + restBottomH;
|
|
|
+ if (isCloseOutput) {
|
|
|
+ area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + closeTopOffset + i *(dftFontHeight + 4) + me.offsetY;
|
|
|
+ area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + closeTopOffset + (i + 1) *(dftFontHeight + 4) + me.offsetY;
|
|
|
+ } else {
|
|
|
+ area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (ah / values.length) + me.offsetY + restTopH;
|
|
|
+ area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (ah / values.length) + me.offsetY + restBottomH;
|
|
|
+ }
|
|
|
if (values[i] === null || values[i] === undefined || values[i] === 'null') {
|
|
|
values[i] = "";
|
|
|
}
|