Переглянути джерело

审批导出PDF + 预览签名移位问题

Tony Kang 2 роки тому
батько
коміт
1c145fedbf

+ 1 - 0
app/public/report/js/jpc_output.js

@@ -501,6 +501,7 @@ let JpcCanvasOutput = {
                 }
             }
         }
+        
         function private_drawImage(cell, control, imageData,moveSignatureTool, orgSize = false, offsetArea) {
             // 新增签章数据到移动工具中
             if(moveSignatureTool){

+ 4 - 50
app/public/report/js/rpt_jsexcel.js

@@ -426,53 +426,7 @@ function writeSheets(pageData, paperSize, sharedStrList, stylesObj, isSinglePage
     }
     return rst;
 }
-function getProperSignatureArea(cell, control) {
-    // 约定默认长宽比例是2:1,图片分辨率是600*300
-    const rst = [0, 0, 0, 0]; // left, top, right, bottom
-    if (cell && cell[JV.PROP_AREA]) {
-        if (cell.hasOwnProperty('isOrgShow') && cell.isOrgShow) {
-            // 例外的约定,按原始类型处理
-            rst[JV.IDX_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
-            rst[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
-            rst[JV.IDX_RIGHT] = cell[JV.PROP_AREA][JV.PROP_RIGHT];
-            rst[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_BOTTOM];
-        } else {
-            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] + JpcCanvasOutput.offsetX;
-    // rst[2] = rst[2] + JpcCanvasOutput.offsetX;
-    // rst[1] = rst[1] + JpcCanvasOutput.offsetY;
-    // rst[3] = rst[3] + JpcCanvasOutput.offsetY;
-    return rst;
-}
+
 function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
     let cell;
     let pos;
@@ -517,7 +471,7 @@ function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
             } else {
                 cellControl = cell[JV.PROP_CONTROL];
             }
-            const area = getProperSignatureArea(cell, cellControl);
+            const area = getProperSignatureArea(cell, cellControl, 0, 0, JV);
             if (cell.signature_name.indexOf(JV.SIGNATURE_NAME_DUMMY) >= 0) {
                 area[JV.IDX_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
                 area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
@@ -543,7 +497,7 @@ function preAnalyzePos(pageData, sheetData, xPos, yPos, yMultiPos) {
             } else {
                 cellControl = cell[JV.PROP_CONTROL];
             }
-            const area = getProperSignatureArea(cell, cellControl);
+            const area = getProperSignatureArea(cell, cellControl, 0, 0, JV);
             if (cell.signature_name.indexOf(JV.SIGNATURE_NAME_DUMMY) >= 0) {
                 area[JV.IDX_LEFT] = cell[JV.PROP_AREA][JV.PROP_LEFT];
                 area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP];
@@ -1109,7 +1063,7 @@ function writeDrawing(pageData, sheetData, subSignKeyArr, sheetIdx) {
         } else {
             cellControl = signCell[JV.PROP_CONTROL];
         }
-        const area = getProperSignatureArea(signCell, cellControl);
+        const area = getProperSignatureArea(signCell, cellControl, 0, 0, JV);
         if (signCell.signature_name.indexOf(JV.SIGNATURE_NAME_DUMMY) >= 0) {
             area[JV.IDX_LEFT] = signCell[JV.PROP_AREA][JV.PROP_LEFT];
             area[JV.IDX_TOP] = signCell[JV.PROP_AREA][JV.PROP_TOP];

+ 1 - 1
app/public/report/js/rpt_jspdf.js

@@ -78,7 +78,7 @@ const JpcJsPDFHelper = {
             rptSignatureHelper.mergeSignAudit(pageObj, signatureRelArr, signAuditArr);
         } else {
             rptSignatureHelper.mergeSignDate(pageObj, signatureRelArr, false, true);
-            rptSignatureHelper.mergeSignature(pageObj, signatureRelArr, false, true); // 这里merge的意义很大
+            // rptSignatureHelper.mergeSignature(pageObj, signatureRelArr, false, true); // 这里merge的意义很大
             rptSignatureHelper.mergeSignAudit(pageObj, signatureRelArr, signAuditArr, true);
         }
         // let signatureCounter = {"allAmt": 0, "picAmt": 0};

+ 2 - 2
app/public/report/js/rpt_print.js

@@ -349,7 +349,7 @@ function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBo
     return rst.join("");
 }
 
-function _resetArea(area, orgSize, offsetArea, offsetX, offsetY) {
+function _resetArea(cell, area, orgSize, offsetArea, offsetX, offsetY) {
     if (orgSize) {
         area[0] = cell[JV.PROP_AREA][JV.PROP_LEFT] + offsetX; // Left
         area[1] = cell[JV.PROP_AREA][JV.PROP_TOP] + offsetY; // Top
@@ -366,7 +366,7 @@ function _resetArea(area, orgSize, offsetArea, offsetX, offsetY) {
 function buildImage(destRst, cell, control, offsetX, offsetY, HtoVStr, orgSize = false, offsetArea) {
     let href = '';
     let area = getProperSignatureArea(cell, control, offsetX, offsetY, JV);
-    _resetArea(area, orgSize, offsetArea, offsetX, offsetY);
+    _resetArea(cell, area, orgSize, offsetArea, offsetX, offsetY);
     if (cell.pic) {
         href = 'href="' + cell.pic +'"';
         destRst.push('<image x="' + area[0] + '" y="' + area[1] + '" width="' + (area[2] - area[0]) + '" height="' + (area[3] - area[1]) + '" ');

+ 46 - 15
app/view/payment/detail.ejs

@@ -220,17 +220,29 @@
     function _getAdhocDummyCells(srcCell, rstCells) {
         if (typeof srcCell.path === 'string') {
             let paths = srcCell.path.split('!;!');
-            for (let dtlPath of paths) {
+            for (let dtlPathIdx = 0; dtlPathIdx < paths.length; dtlPathIdx++) {
+                dtlPath = paths[dtlPathIdx];
+                // srcCell.picFeatures
                 if (dtlPath.length > 10) {
-                    const newStampCell = {
-                        signature_name: 'dummy_pic',
-                        control: srcCell.control,
-                        style: srcCell.style,
-                        path: dtlPath,
-                        isStamp: true,
-                        area: srcCell.area,
-                    };
-                    rstCells.push(newStampCell);
+                    let imgSrc = dtlPath;
+                    if (dtlPath.indexOf(OSS_PATH) < 0 && dtlPath[0] !== '/') {
+                        imgSrc = OSS_PATH + dtlPath;
+                    }
+                    let couldCreate = true;
+                    if (srcCell.picFeatures && srcCell.picFeatures.length === paths.length && srcCell.picFeatures[dtlPathIdx] === 'not found!') {
+                        couldCreate = false;
+                    }
+                    if (couldCreate) {
+                        const newStampCell = {
+                            signature_name: 'dummy_pic',
+                            control: srcCell.control,
+                            style: srcCell.style,
+                            path: imgSrc,
+                            isStamp: true,
+                            area: srcCell.area,
+                        };
+                        rstCells.push(newStampCell);
+                    }
                 }
             }
         }
@@ -238,7 +250,7 @@
 
     function downloadPDFReport(pageDataArr, pageSize, rpt_names, signatureRelArr, signatureRelInfo, refRptTplIds, STAGE_AUDIT) {
         auditRptPrintHelper.currentDownloadIdx = 0;
-        const private_download = function(newPageDataArr, new_rpt_names) {
+        const private_download = function(newPageDataArr, new_rpt_names, dummyCells) {
             if (auditRptPrintHelper.currentDownloadIdx < newPageDataArr.length) {
                 let singleSignatureRelArr = [];
                 for (let rIdx = 0; rIdx < signatureRelInfo.length; rIdx++) {
@@ -252,16 +264,35 @@
                 let rptName = new_rpt_names[auditRptPrintHelper.currentDownloadIdx];
                 auditRptPrintHelper.currentDownloadIdx++;
                 JpcJsPDFHelper.outputAsPdf(pageData, pageSize, rptName, singleSignatureRelArr, STAGE_AUDIT); // 精确控制签名
-                if (auditRptPrintHelper.currentDownloadIdx < newPageDataArr.length) setTimeout(private_download(newPageDataArr, new_rpt_names), 2000);
+                if (auditRptPrintHelper.currentDownloadIdx < newPageDataArr.length) {
+                    setTimeout(private_download(newPageDataArr, new_rpt_names), 2000);
+                } else {
+                    for (let pd of newPageDataArr) {
+                        for (let pItem of pd.items) {
+                            for (let idx = pItem.signature_cells.length - 1; idx >= 0; idx--) {
+                                let pIdx = dummyCells.indexOf(pItem.signature_cells[idx]);
+                                if (pIdx >= 0) {
+                                    pItem.signature_cells.splice(idx, 1);
+                                    dummyCells.splice(pIdx, 1);
+                                }
+                            }
+                        }
+                    }
+                }
             }
         };
         // 导出PDF审核优化代码
         let picPaths = [], dummyPicAmt = 0, dummyCells = [];
         // 1. 先找有没有dummy
         for (let pageData of pageDataArr) {
+            let tmpDummyCells = [];
             for (let page of pageData.items) {
                 for (let dCell of page.signature_cells) {
-                    _getAdhocDummyCells(dCell, dummyCells);
+                    _getAdhocDummyCells(dCell, tmpDummyCells);
+                }
+                if (tmpDummyCells.length > 0) {
+                    page.signature_cells = page.signature_cells.concat(tmpDummyCells);
+                    dummyCells = dummyCells.concat(tmpDummyCells);
                 }
             }
         }
@@ -277,7 +308,7 @@
                         exceptionAmt++;
                         if ((handledAmt + exceptionAmt) === dummyPicAmt) {
                             $.bootstrapLoading.end();
-                            private_download(pageDataArr, rpt_names);
+                            private_download(pageDataArr, rpt_names, dummyCells);
                         }
                     } else {
                         let oFileReader = new FileReader();
@@ -287,7 +318,7 @@
                             handledAmt++;
                             if ((handledAmt + exceptionAmt) === dummyPicAmt) {
                                 $.bootstrapLoading.end();
-                                private_download(pageDataArr, rpt_names);
+                                private_download(pageDataArr, rpt_names, dummyCells);
                             }
                         };
                         oFileReader.readAsDataURL(blob);