|
@@ -10,7 +10,9 @@ let rptPrintHelper = {
|
|
|
let params = rptControlObj.creatCommonExportParam(refRptTplIds);
|
|
|
CommonAjax.postXsrfEx("/tender/report_api/getMultiReports", params, 60000, true, getCookie('csrfToken'),
|
|
|
function(result){
|
|
|
- //sessionStorage.currentPageData = JSON.stringify(zTreeOprObj.currentRptPageRst);
|
|
|
+ for (let idx = 0; idx < result.data.length; idx++) {
|
|
|
+ rptSignatureHelper.mergeSignature(result.data[idx]);
|
|
|
+ }
|
|
|
sessionStorage.multiRptsData = JSON.stringify(result.data);
|
|
|
sessionStorage.pageSize = rptControlObj.getCurrentPageSize();
|
|
|
sessionStorage.orientation = rptControlObj.getCurrentOrientation();
|
|
@@ -68,6 +70,16 @@ let rptPrintHelper = {
|
|
|
svgPageArr.push(buildCellSvg(cell, fonts, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND],
|
|
|
offsetX - actAreaOffsetX, offsetY - actAreaOffsetY, adjustY, canvas, isHtoV, pixelSize, actAreaArr[idx]));
|
|
|
}
|
|
|
+ // 计量有电子签名,要单独处理
|
|
|
+ for (let cell of page.signature_cells) {
|
|
|
+ svgPageArr.push(buildSignatureCellSvg(cell, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND],
|
|
|
+ offsetX - actAreaOffsetX, offsetY - actAreaOffsetY, adjustY, canvas, isHtoV, pixelSize, actAreaArr[idx]));
|
|
|
+ }
|
|
|
+ // 计量有电子签名日期,在处理上与cells一样
|
|
|
+ for (let cell of page.signature_date_cells) {
|
|
|
+ svgPageArr.push(buildCellSvg(cell, fonts, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND],
|
|
|
+ offsetX - actAreaOffsetX, offsetY - actAreaOffsetY, adjustY, canvas, isHtoV, pixelSize, actAreaArr[idx]));
|
|
|
+ }
|
|
|
svgPageArr.push("</svg>");
|
|
|
rst.push(svgPageArr);
|
|
|
}
|
|
@@ -95,6 +107,70 @@ function getActualBorderStyle(cell, styles, mergeBorderStyle, pageBorderArea, bo
|
|
|
return rst;
|
|
|
}
|
|
|
|
|
|
+function buildSignatureCellSvg(cell, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY, adjustY, canvas, isHtoV, pixelSize, actArea) {
|
|
|
+ let rst = [];
|
|
|
+ let style = styles[cell[JV.PROP_STYLE]];
|
|
|
+ let mergeBandStyle = null;
|
|
|
+ if (rptMergeBorder) {
|
|
|
+ mergeBandStyle = styles[rptMergeBorder[JV.PROP_STYLE][JV.PROP_ID]];
|
|
|
+ }
|
|
|
+ let font = cell[JV.PROP_FONT];
|
|
|
+ if (typeof font === 'string') {
|
|
|
+ font = fonts[cell[JV.PROP_FONT]];
|
|
|
+ }
|
|
|
+ let left = parseInt(cell[JV.PROP_AREA][JV.PROP_LEFT]) + offsetX + 0.5,
|
|
|
+ right = parseInt(cell[JV.PROP_AREA][JV.PROP_RIGHT]) + offsetX + 0.5,
|
|
|
+ top = parseInt(cell[JV.PROP_AREA][JV.PROP_TOP]) + offsetY + adjustY,
|
|
|
+ bottom = parseInt(cell[JV.PROP_AREA][JV.PROP_BOTTOM]) + offsetY + adjustY
|
|
|
+ ;
|
|
|
+ let HtoVStr = "";
|
|
|
+ if (isHtoV) {
|
|
|
+ //HtoVStr = ` transform="translate(`+ pixelSize[1] + `,0) rotate(90)"`;
|
|
|
+ // HtoVStr = ` transform="translate(`+ (actArea.Bottom - actArea.Top + 5) + `,0) rotate(90)"`;
|
|
|
+ HtoVStr = ` transform="translate(`+ (actArea.Bottom - actArea.Top + 5) + `,` + (actArea.Left - actArea.Top ) + `) rotate(90)"`;
|
|
|
+ //console.log(actArea);
|
|
|
+ }
|
|
|
+ if (style) {
|
|
|
+ let leftBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_LEFT);
|
|
|
+ // if (style[JV.PROP_LEFT] && parseFloat(style[JV.PROP_LEFT][JV.PROP_LINE_WEIGHT]) > 0) {
|
|
|
+ if (leftBS && parseFloat(leftBS[JV.PROP_LINE_WEIGHT]) > 0) {
|
|
|
+ rst.push("<line x1='" + left + "' y1='" + top +
|
|
|
+ "' x2='" + left + "' y2='" + bottom +
|
|
|
+ "' style='stroke:rgb(0,0,0);stroke-width:" + leftBS[JV.PROP_LINE_WEIGHT] + "'" + HtoVStr + "/>")
|
|
|
+ }
|
|
|
+ let rightBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_RIGHT);
|
|
|
+ // if (style[JV.PROP_RIGHT] && parseFloat(style[JV.PROP_RIGHT][JV.PROP_LINE_WEIGHT]) > 0) {
|
|
|
+ if (rightBS && parseFloat(rightBS[JV.PROP_LINE_WEIGHT]) > 0) {
|
|
|
+ rst.push("<line x1='" + right + "' y1='" + top +
|
|
|
+ "' x2='" + right + "' y2='" + bottom +
|
|
|
+ "' style='stroke:rgb(0,0,0);stroke-width:" + rightBS[JV.PROP_LINE_WEIGHT] +"'" + HtoVStr + "/>")
|
|
|
+ }
|
|
|
+ let topBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_TOP);
|
|
|
+ // if (style[JV.PROP_TOP] && parseFloat(style[JV.PROP_TOP][JV.PROP_LINE_WEIGHT]) > 0) {
|
|
|
+ if (topBS && parseFloat(topBS[JV.PROP_LINE_WEIGHT]) > 0) {
|
|
|
+ rst.push("<line x1='" + left + "' y1='" + top +
|
|
|
+ "' x2='" + right + "' y2='" + top +
|
|
|
+ "' style='stroke:rgb(0,0,0);stroke-width:" + topBS[JV.PROP_LINE_WEIGHT] +"'" + HtoVStr + "/>")
|
|
|
+ }
|
|
|
+ let bottomBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_BOTTOM);
|
|
|
+ // if (style[JV.PROP_BOTTOM] && parseFloat(style[JV.PROP_BOTTOM][JV.PROP_LINE_WEIGHT]) > 0) {
|
|
|
+ if (bottomBS && parseFloat(bottomBS[JV.PROP_LINE_WEIGHT]) > 0) {
|
|
|
+ rst.push("<line x1='" + left + "' y1='" + bottom +
|
|
|
+ "' x2='" + right + "' y2='" + bottom +
|
|
|
+ "' style='stroke:rgb(0,0,0);stroke-width:" + bottomBS[JV.PROP_LINE_WEIGHT] +"'" + HtoVStr + "/>")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ let control = cell[JV.PROP_CONTROL];
|
|
|
+ if (typeof control === 'string') {
|
|
|
+ control = controls[cell[JV.PROP_CONTROL]];
|
|
|
+ }
|
|
|
+ if (cell.pic || cell.path) {
|
|
|
+ buildImage(rst, cell, control, offsetX, offsetY, adjustY, isHtoV, HtoVStr);
|
|
|
+ }
|
|
|
+
|
|
|
+ return rst.join("");
|
|
|
+}
|
|
|
+
|
|
|
function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY, adjustY, canvas, isHtoV, pixelSize, actArea) {
|
|
|
let rst = [];
|
|
|
let style = styles[cell[JV.PROP_STYLE]];
|
|
@@ -157,6 +233,58 @@ function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBo
|
|
|
return rst.join("");
|
|
|
}
|
|
|
|
|
|
+function buildImage(destRst, cell, control, offsetX, offsetY, adjustY, isHtoV, HtoVStr) {
|
|
|
+ let href = '';
|
|
|
+ if (cell.pic) {
|
|
|
+ href = 'href="' + cell.pic +'"';
|
|
|
+ } else {
|
|
|
+ href = 'xlink:href="' + cell.path +'"';
|
|
|
+ }
|
|
|
+ const area = getProperSignatureArea(cell, control, offsetX, offsetY);
|
|
|
+ destRst.push('<image x="' + area[0] + '" y="' + area[1] + '" width="' + (area[2] - area[0]) + '" height="' + (area[3] - area[1]) + '" ');
|
|
|
+ destRst.push(href + HtoVStr + ' />');
|
|
|
+}
|
|
|
+
|
|
|
+function getProperSignatureArea(cell, control, offsetX, offsetY) {
|
|
|
+ // 约定默认长宽比例是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 buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, canvas, isHtoV, HtoVStr) {
|
|
|
let orgFontHeight = parseInt(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]);
|
|
|
let fontWeight = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold":"normal";
|