|
@@ -30,10 +30,10 @@ let JpcJsPDFHelper = {
|
|
|
//
|
|
|
// doc.save('Test.pdf');
|
|
|
},
|
|
|
- outputAsPdf: function (pageData, paperSize, pdfName) {
|
|
|
+ outputAsPdf: function (pageData, paperSize, pdfName, signatureRelArr) {
|
|
|
let me = this;
|
|
|
- let offsetX= 10;
|
|
|
- let offsetY=10;
|
|
|
+ let offsetX = 10;
|
|
|
+ let offsetY = 10;
|
|
|
let newName = pdfName;
|
|
|
let pageObj = pageData;
|
|
|
let paperSizeIdx = JV.PAGES_SIZE_STR.indexOf(paperSize);
|
|
@@ -58,6 +58,7 @@ let JpcJsPDFHelper = {
|
|
|
}
|
|
|
|
|
|
let newPageMergeBand = private_getIniPageMergeBorder(pageObj[JV.BAND_PROP_MERGE_BAND]);
|
|
|
+ // let signatureCounter = {"allAmt": 0, "picAmt": 0};
|
|
|
if (pageObj && pageObj.items.length > 0 ) {
|
|
|
for(let i = 0; i < pageObj.items.length; i++) {
|
|
|
if (i > 0) {
|
|
@@ -79,14 +80,14 @@ let JpcJsPDFHelper = {
|
|
|
let cell = page.cells[j];
|
|
|
private_drawCell(doc, ctx, cell, fonts, styles, controls, newPageMergeBand);
|
|
|
}
|
|
|
- // 计量有电子签名,要单独处理
|
|
|
- for (let cell of page.signature_cells) {
|
|
|
- private_drawSignature(doc, ctx, cell, styles, controls, newPageMergeBand);
|
|
|
- }
|
|
|
// 计量有电子签名日期,在处理上与cells一样
|
|
|
for (let cell of page.signature_date_cells) {
|
|
|
private_drawCell(doc, ctx, cell, fonts, styles, controls, newPageMergeBand);
|
|
|
}
|
|
|
+ // 计量有电子签名,要单独处理
|
|
|
+ for (let cell of page.signature_cells) {
|
|
|
+ private_drawSignature(doc, ctx, cell, styles, controls, newPageMergeBand, signatureRelArr);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
doc.save(newName + '.pdf');
|
|
@@ -100,7 +101,7 @@ let JpcJsPDFHelper = {
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
- function private_drawSignature(doc, ctx, cell, styles, controls, mergeBand) {
|
|
|
+ function private_drawSignature(doc, ctx, cell, styles, controls, mergedBand, signatureRelArr) {
|
|
|
ctx.beginPath();
|
|
|
let style = styles[cell[JV.PROP_STYLE]];
|
|
|
if (style) {
|
|
@@ -110,8 +111,79 @@ let JpcJsPDFHelper = {
|
|
|
private_drawLine(cell, doc, ctx, style, JV.PROP_BOTTOM, [JV.PROP_RIGHT, JV.PROP_BOTTOM],[JV.PROP_LEFT, JV.PROP_BOTTOM], mergedBand, styles, isNeedMergeBand);
|
|
|
private_drawLine(cell, doc, ctx, style, JV.PROP_LEFT, [JV.PROP_LEFT, JV.PROP_BOTTOM],[JV.PROP_LEFT, JV.PROP_TOP], mergedBand, styles, isNeedMergeBand);
|
|
|
}
|
|
|
- // private_drawCellText(doc, ctx, cell, fonts, controls);
|
|
|
ctx.closePath();
|
|
|
+ private_drawSignatureCellText(doc, ctx, cell, controls, signatureRelArr);
|
|
|
+ }
|
|
|
+
|
|
|
+ function private_drawSignatureCellText(doc, ctx, cell, controls, signatureRelArr) {
|
|
|
+ let control = null;
|
|
|
+ if (typeof cell[JV.PROP_CONTROL] === "string") {
|
|
|
+ control = controls[cell[JV.PROP_CONTROL]];
|
|
|
+ } else {
|
|
|
+ control = cell[JV.PROP_CONTROL];
|
|
|
+ }
|
|
|
+ if (cell.path) {
|
|
|
+ let finded = false;
|
|
|
+ for (const rtpSignRel of signatureRelArr) {
|
|
|
+ if (!finded) {
|
|
|
+ for (const signRel of rtpSignRel) {
|
|
|
+ if (cell.signature_name === signRel.signature_name) {
|
|
|
+ private_drawImage(doc, ctx, cell, control, signRel.sign_pic);
|
|
|
+ finded = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if (cell.pic) {
|
|
|
+ private_drawImage(doc, ctx, cell, control, cell.pic);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function private_getProperSignatureArea(cell, control) {
|
|
|
+ // 约定默认长宽比例是2:1,图片分辨率是600*300
|
|
|
+ const rst = [0, 0, 0, 0]; // left, top, right, bottom
|
|
|
+ if (cell && cell[JV.PROP_AREA]) {
|
|
|
+ let width = cell[JV.PROP_AREA][JV.PROP_RIGHT] - cell[JV.PROP_AREA][JV.PROP_LEFT],
|
|
|
+ height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
+ if (width > height * 2) {
|
|
|
+ width = height * 2;
|
|
|
+ } else {
|
|
|
+ height = width / 2;
|
|
|
+ }
|
|
|
+ switch (control[JV.CONTROL_PROPS[JV.CONTROL_PROP_IDX_HORIZON]]) {
|
|
|
+ case 'left':
|
|
|
+ rst[0] = cell[JV.PROP_AREA][JV.PROP_LEFT];
|
|
|
+ rst[1] = cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
+ rst[2] = rst[0] + width;
|
|
|
+ rst[3] = rst[1] + height;
|
|
|
+ break;
|
|
|
+ case 'right':
|
|
|
+ rst[2] = cell[JV.PROP_AREA][JV.PROP_RIGHT];
|
|
|
+ rst[3] = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
|
|
|
+ rst[0] = rst[2] - width;
|
|
|
+ rst[1] = rst[3] - height;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ //center
|
|
|
+ rst[0] = (cell[JV.PROP_AREA][JV.PROP_LEFT] + cell[JV.PROP_AREA][JV.PROP_RIGHT] - width) / 2;
|
|
|
+ rst[1] = cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
+ rst[2] = rst[0] + width;
|
|
|
+ rst[3] = rst[1] + height;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ rst[0] = rst[0] + offsetX;
|
|
|
+ rst[2] = rst[2] + offsetX;
|
|
|
+ rst[1] = rst[1] + offsetY;
|
|
|
+ rst[3] = rst[3] + offsetY;
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
+
|
|
|
+ function private_drawImage(doc, ctx, cell, control, imageData) {
|
|
|
+ let area = private_getProperSignatureArea(cell, control);
|
|
|
+ doc.addImage(imageData, 'PNG', area[0] * PDF_SCALE, area[1] * PDF_SCALE,
|
|
|
+ (area[2] - area[0]) * PDF_SCALE, (area[3] - area[1]) * PDF_SCALE);
|
|
|
}
|
|
|
|
|
|
function private_drawCell(doc, ctx, cell, fonts, styles, controls, mergedBand) {
|