|  | @@ -268,6 +268,33 @@ let JpcCanvasOutput = {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      },
 | 
	
		
			
				|  |  | +    highlightConflictArea: function (pageObj, pageIdx) {
 | 
	
		
			
				|  |  | +        if (pageObj && pageObj.items.length > 0 && pageObj.items.length >= pageIdx) {
 | 
	
		
			
				|  |  | +            let private_create_conflict_line = function () {
 | 
	
		
			
				|  |  | +                return {"LineWeight": "1", "DashStyle": "SOLID", "Color": "RED"};
 | 
	
		
			
				|  |  | +            };
 | 
	
		
			
				|  |  | +            let page = pageObj.items[pageIdx - 1],
 | 
	
		
			
				|  |  | +                styleConflict = {"Left": private_create_conflict_line(), "Right": private_create_conflict_line(), "Top": private_create_conflict_line(), "Bottom": private_create_conflict_line()}
 | 
	
		
			
				|  |  | +            ;
 | 
	
		
			
				|  |  | +            pageObj[JV.NODE_STYLE_COLLECTION]["ConflictCell"] = styleConflict;
 | 
	
		
			
				|  |  | +            let conflictIds = [];
 | 
	
		
			
				|  |  | +            for (let j = 0; j < page.cells.length; j++) {
 | 
	
		
			
				|  |  | +                if (conflictIds.indexOf(j) < 0) {
 | 
	
		
			
				|  |  | +                    let cell1 = page.cells[j];
 | 
	
		
			
				|  |  | +                    for (let k = j + 1; k < page.cells.length; k++) {
 | 
	
		
			
				|  |  | +                        let cell2 = page.cells[k];
 | 
	
		
			
				|  |  | +                        //判断area是否有交叉
 | 
	
		
			
				|  |  | +                        if (areaConflict(cell1[JV.PROP_AREA], cell2[JV.PROP_AREA])) {
 | 
	
		
			
				|  |  | +                            conflictIds.push(j);
 | 
	
		
			
				|  |  | +                            conflictIds.push(k);
 | 
	
		
			
				|  |  | +                            cell1[JV.PROP_STYLE] = "ConflictCell";
 | 
	
		
			
				|  |  | +                            cell2[JV.PROP_STYLE] = "ConflictCell";
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  |      drawPageBorder: function(rptTpl, canvas, resolution) {
 | 
	
		
			
				|  |  |          let me = this;
 | 
	
		
			
				|  |  |          let size = me.getReportSizeInPixel(rptTpl, resolution);
 | 
	
	
		
			
				|  | @@ -295,4 +322,20 @@ let JpcCanvasOutput = {
 | 
	
		
			
				|  |  |          rst[1] = Math.round(resolution[0] * rst[1]);
 | 
	
		
			
				|  |  |          return rst;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +function areaConflict(area1,area2) {
 | 
	
		
			
				|  |  | +    let maxX,maxY,minX,minY,
 | 
	
		
			
				|  |  | +        w1 = area1[JV.PROP_RIGHT] - area1[JV.PROP_LEFT],
 | 
	
		
			
				|  |  | +        w2 = area2[JV.PROP_RIGHT] - area2[JV.PROP_LEFT],
 | 
	
		
			
				|  |  | +        h1 = area1[JV.PROP_BOTTOM] - area1[JV.PROP_TOP],
 | 
	
		
			
				|  |  | +        h2 = area2[JV.PROP_BOTTOM] - area2[JV.PROP_TOP]
 | 
	
		
			
				|  |  | +    ;
 | 
	
		
			
				|  |  | +    //1. 求2个矩形的最小外包矩形
 | 
	
		
			
				|  |  | +    minX = (area1[JV.PROP_LEFT] <= area2[JV.PROP_LEFT]) ? area1[JV.PROP_LEFT] : area2[JV.PROP_LEFT];
 | 
	
		
			
				|  |  | +    minY = (area1[JV.PROP_TOP] <= area2[JV.PROP_TOP]) ? area1[JV.PROP_TOP] : area2[JV.PROP_TOP];
 | 
	
		
			
				|  |  | +    maxX = (area1[JV.PROP_RIGHT] >= area2[JV.PROP_RIGHT]) ? area1[JV.PROP_RIGHT] : area2[JV.PROP_RIGHT];
 | 
	
		
			
				|  |  | +    maxY = (area1[JV.PROP_BOTTOM] >= area2[JV.PROP_BOTTOM]) ? area1[JV.PROP_BOTTOM] : area2[JV.PROP_BOTTOM];
 | 
	
		
			
				|  |  | +    //2. 判断外包矩形与高与宽是否小于俩矩形的高与宽之和(这里的边界条件是小于,等于的话不算;而且是高与宽都得符合条件!)
 | 
	
		
			
				|  |  | +    return (maxX - minX < w1 + w2 && maxY - minY < h1 + h2);
 | 
	
		
			
				|  |  | +}
 |