فهرست منبع

水印(导出PDF,打印)

TonyKang 5 سال پیش
والد
کامیت
0fab4ed9b6

+ 33 - 5
app/controller/report_controller.js

@@ -268,6 +268,9 @@ module.exports = app => {
             if (!params.stage_select && copyCustomSelect) delete copyCustomSelect.stage_select;
 
             const pageRst = await getAllPagesCommon(ctx, rptTpl, params, JV.PAGING_OPTION_NORMAL, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir, copyCustomSelect);
+            for (const page of pageRst.items) {
+                page[JV.PROP_WATERMARK_CELLS] = [];
+            }
             if (params.stage_status !== 3) {
                 // 加水印
                 // fillWaterMark([pageRst]);
@@ -357,9 +360,14 @@ module.exports = app => {
             const params = JSON.parse(ctx.request.body.params);
             await this._saveCustomSelects(params);
             const pageRstArr = await getMultiRptsCommon(ctx, params, JV.OUTPUT_TYPE_NORMAL, this.app.baseDir);
+            for (const pageRst of pageRstArr) {
+                for (const page of pageRst.items) {
+                    page[JV.PROP_WATERMARK_CELLS] = [];
+                }
+            }
             if (params.stage_status !== 3) {
                 // 加水印
-                // fillWaterMark(pageRstArr);
+                fillWaterMark(pageRstArr);
             }
             const stgAudit = await ctx.service.stageAudit.getStageAudit(params.stage_id, params.stage_times);
             const roleRel = (params.stage_status === 3) ? (await ctx.service.roleRptRel.getRoleRptRelByDetailIds(params.tender_id, params.rpt_ids, params.stage_id)) : [];
@@ -1028,8 +1036,8 @@ function isFileExisted(file) {
 
 function fillWaterMark(pageRstArray) {
     for (const pageRst of pageRstArray) {
-        const orgWaterMarkWidth = 800;
-        const orgWaterMarkHeight = 350;
+        const orgWaterMarkWidth = 600;
+        const orgWaterMarkHeight = 288;
         for (const page of pageRst.items) {
             const w = page[JV.PROP_PAGE_MERGE_BORDER].Right - page[JV.PROP_PAGE_MERGE_BORDER].Left;
             const h = page[JV.PROP_PAGE_MERGE_BORDER].Bottom - page[JV.PROP_PAGE_MERGE_BORDER].Top;
@@ -1040,6 +1048,7 @@ function fillWaterMark(pageRstArray) {
             const warterCell = {
                 signature_name: JV.SIGNATURE_NAME_DUMMY,
                 path: '/public/images/not_Approve.png',
+                sign_path: '/public/images/not_Approve.png',
                 pic: null,
                 control: 'Title',
                 style: 'Default_None',
@@ -1050,8 +1059,8 @@ function fillWaterMark(pageRstArray) {
                     Bottom: bottom,
                 },
             };
-            console.log(page[JV.PROP_PAGE_MERGE_BORDER]);
-            page[JV.PROP_SIGNATURE_CELLS].push(warterCell);
+            page[JV.PROP_WATERMARK_CELLS] = [];
+            page[JV.PROP_WATERMARK_CELLS].push(warterCell);
         }
     }
 }
@@ -1108,6 +1117,25 @@ async function encodeDummySignatureDataUri(pageRst, baseDir) {
                     }
                 }
             }
+            for (const signature of page[JV.PROP_WATERMARK_CELLS]) {
+                if (signature.path !== '') {
+                    const filePath = baseDir + '/app' + signature.path;
+                    try {
+                        const res = await isFileExisted(filePath);
+                        if (res) {
+                            const bData = fs.readFileSync(filePath);
+                            const base64Str = bData.toString('base64');
+                            const datauri = 'data:image/png;base64,' + base64Str;
+                            signature.pic = datauri;
+                            signature.path = '';
+                        } else {
+                            console.log('文件不存在:' + filePath);
+                        }
+                    } catch (err) {
+                        console.error(err);
+                    }
+                }
+            }
         }
     }
 }

BIN
app/public/images/not_Approve.png


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

@@ -458,6 +458,13 @@ let JpcCanvasOutput = {
                     private_drawSignatureCell(cell, fonts, styles, controls, newPageMergeBand);
                 }
             }
+            //水印
+            if (page.watermark_cells && page.watermark_cells.length > 0) {
+                for (let k = 0; k < page.watermark_cells.length; k++) {
+                    let cell = page.watermark_cells[k];
+                    private_drawSignatureCell(cell, fonts, styles, controls, newPageMergeBand);
+                }
+            }
             //电子签名日期(跟普通格子输出一样)
             if (page.signature_date_cells && page.signature_date_cells.length > 0) {
                 for (let k = 0; k < page.signature_date_cells.length; k++) {

+ 13 - 0
app/public/report/js/rpt_jspdf.js

@@ -101,6 +101,9 @@ let JpcJsPDFHelper = {
                         private_drawSignature(doc, ctx, cell, styles, controls, newPageMergeBand, true, signatureRelArr);
                     }
                 }
+                for (let cell of page.watermark_cells) {
+                    _drawWatermark(doc, ctx, cell, controls);
+                }
             }
         }
         doc.save(newName + '.pdf');
@@ -114,6 +117,16 @@ let JpcJsPDFHelper = {
             return rst;
         }
 
+        function _drawWatermark(doc, ctx, cell, controls) {
+            let control = null;
+            if (typeof cell[JV.PROP_CONTROL] === "string") {
+                control = controls[cell[JV.PROP_CONTROL]];
+            } else {
+                control = cell[JV.PROP_CONTROL];
+            }
+            private_drawImage(doc, ctx, cell, control, cell.pic, [1, 1, 1, 1]);
+        }
+
         function private_drawSignature(doc, ctx, cell, styles, controls, mergedBand, onlyShowBorder, signatureRelArr) {
             ctx.beginPath();
             let style = styles[cell[JV.PROP_STYLE]];

+ 4 - 0
app/public/report/js/rpt_print.js

@@ -115,6 +115,10 @@ let rptPrintHelper = {
                 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]));
             }
+            for (let cell of page.watermark_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],