Browse Source

bill tab content output / PDF page orientation

TonyKang 7 years ago
parent
commit
4a7248599c

+ 1 - 1
modules/reports/rpt_component/jpc_bill_tab.js

@@ -83,7 +83,7 @@ JpcBillTabSrv.prototype.createNew = function(){
                     if (!(tab_field[JV.PROP_HIDDEN])) {
                         let val = JpcFieldHelper.getValue(data_field, page - 1);
                         let cellItem = JpcCommonOutputHelper.createCommonOutput(tab_field, val, controls);
-                        cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, true, false);
+                        cellItem[JV.PROP_AREA] = JpcAreaHelper.outputArea(tab_field[JV.PROP_AREA], band, unitFactor, 1, 0, 1, 0, 1, 0, false, false);
                         rst.push(cellItem);
                     }
                 }

+ 52 - 2
modules/reports/util/rpt_construct_data_util.js

@@ -623,6 +623,50 @@ function shielded_exec_env($PROJECT, $ME, rptDataItemObj) {
     }
 }
 
+function getActPropertyVal(firstPropKey, secPropKey, orgObj) {
+    let rst = null;
+    if (orgObj[firstPropKey]) {
+        rst = orgObj[firstPropKey];
+    } else if (orgObj[secPropKey]){
+        rst = orgObj[secPropKey];
+    }
+    return rst;
+}
+
+function getDeepProperty(propKey, orgObj, destArr) {
+    let keys = propKey.split(".");
+    let dftPropKey = "key", dftPropVal = "value", secDftPropVal = "items";
+    let parent = orgObj, lastVal = null;
+    for (let key of keys) {
+        if (parent instanceof Array) {
+            for (let item of parent) {
+                if (item[dftPropKey] === key) {
+                    lastVal = getActPropertyVal(dftPropVal, secDftPropVal, item);
+                    break;
+                }
+            }
+        } else {
+            lastVal = null;
+            if (parent[key] !== undefined) {
+                lastVal = parent[key];
+            } else if (parent[secDftPropVal]){
+                for (let item of parent[secDftPropVal]) {
+                    if (item[dftPropKey] === key) {
+                        // lastVal = item[dftPropVal];
+                        lastVal = getActPropertyVal(dftPropVal, secDftPropVal, item);
+                        break;
+                    }
+                }
+            }
+        }
+        parent = lastVal;
+        if (parent === null) break;
+    }
+    if (destArr && destArr instanceof Array) {
+        destArr.push(lastVal);
+    }
+}
+
 function ext_mainGetPropety(propKey) {
     let rst = [], parentObj = this;
     let dtObj = parentObj["myOwnRawDataObj"];
@@ -631,10 +675,11 @@ function ext_mainGetPropety(propKey) {
             if (!dtObj["property"][propKey] && dtObj[propKey]) {
                 rst.push(dtObj[propKey]);
             } else {
-                rst.push(dtObj["property"][propKey]);
+                getDeepProperty(propKey, dtObj["property"], rst);
             }
         } else  {
-            rst.push(dtObj[propKey]);
+            // rst.push(dtObj[propKey]);
+            getDeepProperty(propKey, dtObj, rst);
         }
     }
     return rst;
@@ -647,6 +692,11 @@ function ext_getPropety(propKey) {
         for (let dItem of dtObj.data) {
             let doc = (dItem._doc === null || dItem._doc === undefined)?dItem:dItem._doc;
             if (doc.hasOwnProperty("property")) {
+                // if (!doc["property"][propKey] && doc[propKey]) {
+                //     rst.push(doc[propKey]);
+                // } else {
+                //     getDeepProperty(propKey, doc["property"], rst);
+                // }
                 rst.push(doc["property"][propKey]);
             } else if (doc.hasOwnProperty(propKey)) {
                 rst.push(doc[propKey]);

+ 49 - 1
modules/reports/util/rpt_pdf_util.js

@@ -42,7 +42,11 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
     let newPageMergeBand = private_getIniPageMergeBorder(pageObj[JV.BAND_PROP_MERGE_BAND]);
     if (pageObj && pageObj.items.length > 0 ) {
         for(let i=0;i<pageObj.items.length;i++){
-            doc.addPage({size:[size[1]*DPI,size[0]*DPI]});
+            if (pageData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][0] > pageData[JV.NODE_PAGE_INFO][JV.NODE_PAGE_SIZE][1]) {
+                doc.addPage({size:[size[1]*DPI,size[0]*DPI]});
+            } else {
+                doc.addPage({size:[size[0]*DPI,size[1]*DPI]});
+            }
             let page = pageObj.items[i],
                 fonts = pageObj[JV.NODE_FONT_COLLECTION],
                 styles = pageObj[JV.NODE_STYLE_COLLECTION],
@@ -179,7 +183,51 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
             }
         }
 
+        function private_drawUnderline() {
+            //A. 暂不支持角度; B. 坐标已经translate
+            let ctx = doc;
+            //1. 计算下划线的相关坐标
+            let width = ctx.widthOfString(val);
+            let height = dftFontHeight;
+            let startX = area[JV.IDX_LEFT], startY = area[JV.IDX_TOP], endX = area[JV.IDX_RIGHT], endY = area[JV.IDX_BOTTOM];
+            // let startX = 0, startY = 0, endX = width, endY = startY;
+            if (control.Horizon === "left") {
+                // 无变化;
+            } else if (control.Horizon === "right") {
+                startX = Math.round(startX - width);
+            } else {
+                startX = Math.round(startX - width / 2);
+            }
+            endX = Math.round(startX + width);
+
+            if (control.Vertical === "top") {
+                startY += JV.OUTPUT_OFFSET[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.IDX_BOTTOM];
+            } else if (control.Vertical === "bottom") {
+                // startY = Math.round(startY);
+                startY += JV.OUTPUT_OFFSET[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.IDX_BOTTOM];
+            } else {
+                startY = Math.round(height / 2) - JV.OUTPUT_OFFSET[JV.IDX_TOP] - JV.OUTPUT_OFFSET[JV.IDX_BOTTOM];
+                // startY += JV.OUTPUT_OFFSET[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.IDX_BOTTOM];
+            }
+            endY = Math.round(startY);
+            //2. 画线
+            // ctx.save();
+            if ( output[1] !== Math.round(output[1])) {
+                ctx.translate(0,0.5);
+            }
+            // ctx.beginPath();
+            ctx.moveTo(startX, startY);
+            ctx.lineWidth(1);
+            ctx.strokeStyle = "BLACK";
+            ctx.lineTo(endX, endY);
+            ctx.stroke();
+            // ctx.restore();
+        }
+
         let rotateOptions;
+        if (font[JV.FONT_PROPS[5]] === 'T' && parseInt(font.FontAngle) === 0) {
+            // private_drawUnderline();
+        }
         if (parseInt(font.FontAngle) !== 0) {
             if (control){
                 rotateOptions=private_setupAreaRotateOption(area,w,control.Vertical,dftFontHeight, output);

+ 2 - 3
test/unit/reports/test_cover_01.js

@@ -40,8 +40,7 @@ let demoPrjId = - 1;
 let demoRptId = 223, pagesize = "A4";
 
 let userId_Leng = 1142; //小冷User Id
-// demoPrjId = 720; //QA: DW3
-demoPrjId = 838; //QA:
+demoPrjId = 1220; //QA:
 /*/
  let userId_Dft = userId_Leng;
  /*/
@@ -82,7 +81,7 @@ test('测试 - 打开模板: 封-1 ', function (t) {
                     let maxPages = printCom.totalPages;
                     let pageRst = printCom.outputAsSimpleJSONPageArray(rptTpl, tplData, 1, maxPages, defProperties);
                     if (pageRst) {
-                        fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.js");
+                        // fsUtil.writeObjToFile(pageRst, "D:/GitHome/ConstructionCost/tmp/testBuiltPageResult.js");
                     } else {
                         console.log("oh! no pages were created!");
                     }