|
@@ -73,7 +73,7 @@ let JpcJsPDFHelper = {
|
|
|
if (i > 0) {
|
|
|
doc.addPage(paperSize.toLowerCase(), orientation);
|
|
|
}
|
|
|
- let ctx = doc.canvas.getContext();
|
|
|
+ let ctx = doc.canvas.getContext("2d");
|
|
|
let page = pageObj.items[i],
|
|
|
fonts = pageObj[JV.NODE_FONT_COLLECTION],
|
|
|
styles = pageObj[JV.NODE_STYLE_COLLECTION],
|
|
@@ -266,6 +266,46 @@ let JpcJsPDFHelper = {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ function _splitValues(cell, control, orgValues, doc) {
|
|
|
+ //根据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];
|
|
|
+ for (let val of orgValues) {
|
|
|
+ let actW = doc.getTextWidth(val);
|
|
|
+ if (actW > validAreaTxtWidth) {
|
|
|
+ let lastIdx = 0;
|
|
|
+ let hasEnd = false;
|
|
|
+ while (!hasEnd) {
|
|
|
+ let sCnt = 0;
|
|
|
+ while (sCnt < val.length) {
|
|
|
+ let cnt = 1;
|
|
|
+ //支持HTML5的浏览器全是unicode数据,无需特别处理
|
|
|
+ if (doc.getTextWidth(val.substring(lastIdx, sCnt + cnt)) > validAreaTxtWidth) {
|
|
|
+ vals.push(val.substring(lastIdx, sCnt));
|
|
|
+ lastIdx = sCnt;
|
|
|
+ sCnt += cnt;
|
|
|
+ } else {
|
|
|
+ sCnt += cnt;
|
|
|
+ }
|
|
|
+ if (sCnt >= val.length) {
|
|
|
+ hasEnd = true;
|
|
|
+ vals.push(val.substring(lastIdx, val.length));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ vals.push(val);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (vals.length > orgValues.length) {
|
|
|
+ for (let idx = 0; idx < vals.length; idx++) {
|
|
|
+ orgValues[idx] = vals[idx];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
function private_drawCellText(doc, ctx, cell, fonts, controls) {
|
|
|
if (cell[JV.PROP_VALUE] !== undefined && cell[JV.PROP_VALUE] !== null) {
|
|
|
let values = ("" + cell[JV.PROP_VALUE]).split('|');
|
|
@@ -293,6 +333,12 @@ let JpcJsPDFHelper = {
|
|
|
} else {
|
|
|
control = cell[JV.PROP_CONTROL];
|
|
|
}
|
|
|
+
|
|
|
+ if (font) {
|
|
|
+ doc.setFontSize(1 * font[JV.FONT_PROPS[1]]);
|
|
|
+ }
|
|
|
+ _splitValues(cell, control, values, doc);
|
|
|
+
|
|
|
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] + offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + offsetY];
|
|
|
let ah = height;
|