Преглед изворни кода

code sync for printing tuning

TonyKang пре 6 година
родитељ
комит
2c44a72034

+ 44 - 8
web/building_saas/report/html/rpt_print.html

@@ -47,32 +47,36 @@
                 if (idx === 0) {
                     $(document).attr("title", pageData[JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
                 }
-                let svgArr = rptPrintHelper.buildSvgArr(pageData, G_OFFSET_X, G_OFFSET_Y);
+                let orgPixelSize = getPixelSize(pageData);
+                let actArea = getActualArea(pageData);
+                let svgArr = rptPrintHelper.buildSvgArr(pageData, actArea, G_OFFSET_X, G_OFFSET_Y);
                 //let orientation = (pageData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][0] < pageData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][1])?"纵向":"横向";
                 let orientation = "纵向";
-                showPreviewData(svgArr, scaleFactor, sessionStorage.pageSize, orientation);
+                showPreviewData(svgArr, actArea, scaleFactor, sessionStorage.pageSize, orientation, orgPixelSize);
             }
             window.print();
         } else if (sessionStorage.currentPageData) {
             let pageData = JSON.parse(sessionStorage.currentPageData);
             let scaleFactor = parseInt(sessionStorage.scaleFactor);
-            let svgArr = rptPrintHelper.buildSvgArr(pageData, G_OFFSET_X, G_OFFSET_Y);
+            let orgPixelSize = getPixelSize(pageData);
+            let actArea = getActualArea(pageData);
+            let svgArr = rptPrintHelper.buildSvgArr(pageData, actArea, G_OFFSET_X, G_OFFSET_Y);
             $(document).attr("title", pageData[JV.NODE_PAGE_INFO][JV.NODE_MAIN_INFO_RPT_NAME]);
             //showPreviewData(svgArr, scaleFactor, sessionStorage.pageSize, sessionStorage.orientation);
-            showPreviewData(svgArr, scaleFactor, sessionStorage.pageSize, "纵向");
+            showPreviewData(svgArr, actArea, scaleFactor, sessionStorage.pageSize, "纵向", orgPixelSize);
             window.print();
         } else if (sessionStorage.currentPageSvgData) {
             let svgArr = JSON.parse(sessionStorage.currentPageSvgData);
             let scaleFactor = 1;
             //showPreviewData(svgArr, scaleFactor, sessionStorage.pageSize, sessionStorage.orientation);
-            showPreviewData(svgArr, scaleFactor, sessionStorage.pageSize, "纵向");
+            showPreviewData(svgArr, null, scaleFactor, sessionStorage.pageSize, "纵向", null);
             window.print();
         } else {
             //alert("没有报表数据!");
         }
     }
 
-    function showPreviewData(svgArr, scaleFactor, pageSize, orientation) {
+    function showPreviewData(svgArr, actAreaArr, scaleFactor, pageSize, orientation, orgPixelSize) {
         let orgHeight = 793, orgWidth = 1122;
         if (pageSize === 'A3') {
             orgHeight = 1122;
@@ -89,16 +93,48 @@
         }
 
         for (let i = 0; i < svgArr.length; i++) {
+            let offsetHeight = 0, offsetWidth = 0;
+            if (actAreaArr) {
+                offsetWidth = actAreaArr[i].Left + (pageWidth - actAreaArr[i].Right) - 5;
+                offsetHeight = actAreaArr[i].Top + (pageHeight - actAreaArr[i].Bottom) - 5;
+                if (orgPixelSize[0] > orgPixelSize[1]) {
+                    //横向强制改纵向(系统是以纵向为准),那么计算offset的方式会有所不同
+                    offsetWidth = actAreaArr[i].Top + (pageWidth - actAreaArr[i].Bottom) - 5;
+                    offsetHeight = actAreaArr[i].Left + (pageHeight - actAreaArr[i].Right) - 5;
+                }
+            }
             let div = $('<div class="pageBreak"></div>');
             div.append($(svgArr[i].join("")));
             $(div).find("svg").each(function(cIdx,elementSvg){
-                elementSvg.setAttribute('height', pageHeight);
-                elementSvg.setAttribute('width', pageWidth);
+                elementSvg.setAttribute('height', pageHeight - offsetHeight);
+                elementSvg.setAttribute('width', pageWidth - offsetWidth);
             });
             $("body").append(div);
         }
     }
 
+    function getActualArea(pageData) {
+        let rst = [];
+        for (let item of pageData.items) {
+            let area = {Left: 10000, Right: 0, Top: 10000, Bottom: 0};
+            for (let cell of item.cells) {
+                if (cell.area.Left < area.Left) {
+                    area.Left = cell.area.Left;
+                }
+                if (cell.area.Right > area.Right) {
+                    area.Right = cell.area.Right;
+                }
+                if (cell.area.Top < area.Top) {
+                    area.Top = cell.area.Top;
+                }
+                if (cell.area.Bottom > area.Bottom) {
+                    area.Bottom = cell.area.Bottom;
+                }
+            }
+            rst.push(area);
+        }
+        return rst;
+    }
     function closing() {
         //
     }

+ 4 - 1
web/building_saas/report/js/jpc_output.js

@@ -376,7 +376,10 @@ let JpcCanvasOutput = {
         ctx.fillRect(10 + me.offsetX,size[1] + me.offsetY,size[0],10);
     },
     getReportSizeInPixel: function(rptTpl, resolution) {
-        let rst = rptTpl[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
+        let rst = [8.27, 11.69];
+        if (rptTpl && rptTpl[JV.NODE_PAGE_INFO] && rptTpl[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE]) {
+            rst = rptTpl[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE].slice(0);
+        }
         rst[0] = Math.round(resolution[0] * rst[0]);
         rst[1] = Math.round(resolution[0] * rst[1]);
         return rst;

+ 7 - 3
web/building_saas/report/js/rpt_main.js

@@ -258,10 +258,11 @@ let zTreeOprObj = {
         hintBox.waitBox();
         CommonAjax.postEx("report_api/getReport", params, 15000, true,
             function(result){
+                hintBox.unWaitBox();
                 let pageRst = result;
-                if (pageRst) {
+                let canvas = document.getElementById("rptCanvas");
+                if (pageRst && pageRst.items && pageRst.items.length > 0) {
                     me.resetAfter(pageRst);
-                    let canvas = document.getElementById("rptCanvas");
                     me.currentRptPageRst = pageRst;
                     me.maxPages = pageRst.items.length;
                     me.currentPage = 1;
@@ -274,7 +275,10 @@ let zTreeOprObj = {
                         canvas.height = size[1] + 50;
                     }
                     me.showPage(1, canvas);
-                    hintBox.unWaitBox();
+                } else {
+                    //返回了无数据表
+                    JpcCanvasOutput.cleanCanvas(canvas);
+                    JpcCanvasOutput.drawPageBorder(me.currentRptPageRst, canvas, getScreenDPI());
                 }
             }, function(err){
                 hintBox.unWaitBox();

+ 13 - 4
web/building_saas/report/js/rpt_print.js

@@ -49,7 +49,7 @@ let rptPrintHelper = {
     previewSvgData: function() {
         //
     },
-    buildSvgArr: function (pagesData, offsetX, offsetY) {
+    buildSvgArr: function (pagesData, actAreaArr, offsetX, offsetY) {
         let styles = pagesData[JV.NODE_STYLE_COLLECTION],
             fonts = pagesData[JV.NODE_FONT_COLLECTION],
             controls = pagesData[JV.NODE_CONTROL_COLLECTION]
@@ -64,12 +64,20 @@ let rptPrintHelper = {
         }
         for (let idx = 0; idx < pagesData.items.length; idx++) {
             let page = pagesData.items[idx];
+            let actAreaOffsetX = 0, actAreaOffsetY = 0;
+            if (actAreaArr) {
+                actAreaOffsetX = actAreaArr[idx].Left;
+                actAreaOffsetY = actAreaArr[idx].Top;
+                if (pixelSize[0] > pixelSize[1]) {
+                }
+            }
             let svgPageArr = [];
             svgPageArr.push("<svg width='" + pixelSize[0] + "' height='" + pixelSize[1] + "'>");
             // let adjustY = 0.5 * ((idx + 1) % 2);
             let adjustY = 0.5;
             for (let cell of page.cells) {
-                svgPageArr.push(buildCellSvg(cell, fonts, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND], offsetX, offsetY, adjustY, canvas, isHtoV, pixelSize));
+                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);
@@ -98,7 +106,7 @@ function getActualBorderStyle(cell, styles, mergeBorderStyle, pageBorderArea, bo
     return rst;
 }
 
-function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY, adjustY, canvas, isHtoV, pixelSize) {
+function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY, adjustY, canvas, isHtoV, pixelSize, actArea) {
     let rst = [];
     let style = styles[cell[JV.PROP_STYLE]];
     let mergeBandStyle = null;
@@ -116,7 +124,8 @@ function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBo
     ;
     let HtoVStr = "";
     if (isHtoV) {
-        HtoVStr = ` transform="translate(`+ pixelSize[1] + `,0) rotate(90)"`;
+        //HtoVStr = ` transform="translate(`+ pixelSize[1] + `,0) rotate(90)"`;
+        HtoVStr = ` transform="translate(`+ (actArea.Bottom - actArea.Top + 5) + `,0) rotate(90)"`;
     }
     if (style) {
         let leftBS = getActualBorderStyle(cell, styles, mergeBandStyle, (pageMergeBorder)?pageMergeBorder:rptMergeBorder[JV.PROP_AREA], JV.PROP_LEFT);