|
@@ -139,9 +139,12 @@ let JpcCanvasOutput = {
|
|
|
}
|
|
|
};
|
|
|
inner_setupControl(area, 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];
|
|
|
+ let validAreaTxtWidth = area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - area[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
|
|
|
+ //let validAreaTxtHeight = area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] - area[JV.IDX_TOP] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
|
+ let validTxtLines = Math.floor((area[JV.IDX_BOTTOM] - area[JV.IDX_TOP]) / (dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + 4));
|
|
|
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];
|
|
|
+ validAreaTxtWidth = area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] - area[JV.IDX_TOP] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
|
+ validTxtLines = Math.floor((area[JV.IDX_RIGHT] - area[JV.IDX_LEFT]) / (dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT] + 4));
|
|
|
}
|
|
|
|
|
|
function private_drawUnderline() {
|
|
@@ -194,13 +197,14 @@ let JpcCanvasOutput = {
|
|
|
} else if (font.FontAngle === JV.ANTI_VERTICAL_ANGLE) {
|
|
|
ctx.rotate(-Math.PI/2);
|
|
|
}
|
|
|
- if (w >= ctx.measureText(val).width || (control && control.Shrink !== 'T') ) {
|
|
|
+ if (validAreaTxtWidth >= ctx.measureText(val).width ||
|
|
|
+ (control && control.Shrink !== 'T' && validTxtLines < private_splitString(val, validAreaTxtWidth, ctx)) ) {
|
|
|
ctx.fillText(val, 0, 0);
|
|
|
} else {
|
|
|
while (true) {
|
|
|
let lines = Math.floor((area[JV.IDX_BOTTOM] - area[JV.IDX_TOP]) / (dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + 4));
|
|
|
- lines = (lines === 0)?1:lines;
|
|
|
- let actLines = private_splitString(val, w, ctx);
|
|
|
+ lines = (lines === 0 || (control.Shrink === 'T' && control.ShrinkFirst === 'T'))?1:lines;
|
|
|
+ let actLines = private_splitString(val, validAreaTxtWidth, ctx);
|
|
|
if (actLines.length > lines && dftFontHeight >= 6) {
|
|
|
dftFontHeight--;
|
|
|
ctx.font = "" + dftFontHeight + "px " + font[JV.PROP_NAME];
|
|
@@ -259,9 +263,28 @@ let JpcCanvasOutput = {
|
|
|
}
|
|
|
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;
|
|
|
+ }
|
|
|
+ }
|
|
|
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 * (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;
|
|
|
+ if (values[i] === null || values[i] === undefined || values[i] === 'null') {
|
|
|
+ values[i] = "";
|
|
|
+ }
|
|
|
private_drawText(values[i], area, font, control);
|
|
|
}
|
|
|
}
|
|
@@ -400,7 +423,10 @@ let JpcCanvasOutput = {
|
|
|
ctx.fillRect(10 + me.offsetX,size[1] + me.offsetY,size[0],10);
|
|
|
},
|
|
|
getReportSizeInPixel: function(rptTpl, resolution) {
|
|
|
- let rst = rptTpl[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
|
|
|
+ let rst = [8.27, 11.69];
|
|
|
+ if (rptTpl && rptTpl[JV.NODE_PAGE_INFO] && rptTpl[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE]) {
|
|
|
+ rst = rptTpl[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
|
|
|
+ }
|
|
|
rst[0] = Math.round(resolution[0] * rst[0]);
|
|
|
rst[1] = Math.round(resolution[0] * rst[1]);
|
|
|
return rst;
|