|
@@ -6,8 +6,8 @@
|
|
|
*/
|
|
|
|
|
|
const prf_cons = require('./pdf_base_files/rpt_pdf_consts');
|
|
|
-var pdf = require('pdfkit');
|
|
|
-var fs = require('fs');
|
|
|
+let pdf = require('pdfkit');
|
|
|
+let fs = require('fs');
|
|
|
let jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
|
|
|
let DPI = jpcCmnHelper.getScreenDPI()[0];
|
|
|
//let JV = prf_cons.JV;
|
|
@@ -21,7 +21,7 @@ module.exports ={
|
|
|
function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
let offsetX= 10;
|
|
|
let offsetY=10;
|
|
|
- var doc = new pdf({autoFirstPage: false});
|
|
|
+ let doc = new pdf({autoFirstPage: false});
|
|
|
let newName = '' + (new Date()).valueOf();
|
|
|
let stream = doc.pipe(fs.createWriteStream(__dirname.slice(0, __dirname.length - 21) + '/tmp/'+newName+'.pdf'));
|
|
|
let pageObj = pageData;
|
|
@@ -29,18 +29,34 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
let paperSizeIdx = JV.PAGES_SIZE_STR.indexOf(paperSize);
|
|
|
let size = JV.PAGES_SIZE[paperSizeIdx];
|
|
|
|
|
|
+ function private_getIniPageMergeBorder(mergedBand) {
|
|
|
+ let rst = {};
|
|
|
+ rst[JV.PROP_LEFT] = mergedBand[JV.PROP_LEFT];
|
|
|
+ rst[JV.PROP_RIGHT] = mergedBand[JV.PROP_RIGHT];
|
|
|
+ rst[JV.PROP_TOP] = mergedBand[JV.PROP_TOP];
|
|
|
+ rst[JV.PROP_BOTTOM] = mergedBand[JV.PROP_BOTTOM];
|
|
|
+ rst[JV.PROP_STYLE] = mergedBand[JV.PROP_STYLE];
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
+
|
|
|
+ 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]});
|
|
|
- var page = pageObj.items[i],
|
|
|
+ let page = pageObj.items[i],
|
|
|
fonts = pageObj[JV.NODE_FONT_COLLECTION],
|
|
|
styles = pageObj[JV.NODE_STYLE_COLLECTION],
|
|
|
- controls = pageObj[JV.NODE_CONTROL_COLLECTION],
|
|
|
- mergedBand = pageObj[JV.BAND_PROP_MERGE_BAND];
|
|
|
+ controls = pageObj[JV.NODE_CONTROL_COLLECTION];
|
|
|
|
|
|
- for (var j = 0; j < page.cells.length; j++) {
|
|
|
- var cell = page.cells[j];
|
|
|
- private_drawCell(cell, fonts, styles, controls, mergedBand);
|
|
|
+ if (page[JV.PROP_PAGE_MERGE_BORDER]) {
|
|
|
+ newPageMergeBand[JV.PROP_LEFT] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_LEFT];
|
|
|
+ newPageMergeBand[JV.PROP_RIGHT] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_RIGHT];
|
|
|
+ newPageMergeBand[JV.PROP_TOP] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_TOP];
|
|
|
+ newPageMergeBand[JV.PROP_BOTTOM] = page[JV.PROP_PAGE_MERGE_BORDER][JV.PROP_BOTTOM];
|
|
|
+ }
|
|
|
+ for (let j = 0; j < page.cells.length; j++) {
|
|
|
+ let cell = page.cells[j];
|
|
|
+ private_drawCell(cell, fonts, styles, controls, newPageMergeBand);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -48,34 +64,43 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
stream.on('finish',function () {
|
|
|
console.log(newName + ".pdf was written.");
|
|
|
callback(newName);
|
|
|
- })
|
|
|
+ });
|
|
|
|
|
|
+ function private_chkIfInMergedBand(mergedBand, cell) {
|
|
|
+ let rst = false;
|
|
|
+ if (mergedBand && cell) {
|
|
|
+ rst = mergedBand[JV.PROP_TOP] <= cell[JV.PROP_AREA][JV.PROP_TOP] && mergedBand[JV.PROP_BOTTOM] >= cell[JV.PROP_AREA][JV.PROP_BOTTOM] &&
|
|
|
+ mergedBand[JV.PROP_LEFT] <= cell[JV.PROP_AREA][JV.PROP_LEFT] && mergedBand[JV.PROP_RIGHT] >= cell[JV.PROP_AREA][JV.PROP_RIGHT];
|
|
|
+ }
|
|
|
+ return rst;
|
|
|
+ }
|
|
|
|
|
|
function private_drawCell(cell, fonts, styles, controls, mergedBand) {
|
|
|
doc.save();
|
|
|
//doc.translate(0.5,0.5);
|
|
|
- var style = styles[cell[JV.PROP_STYLE]];
|
|
|
+ let style = styles[cell[JV.PROP_STYLE]];
|
|
|
if (style) {
|
|
|
- private_drawLine(cell, doc, style, JV.PROP_TOP, [JV.PROP_LEFT, JV.PROP_TOP],[JV.PROP_RIGHT, JV.PROP_TOP], mergedBand, styles);
|
|
|
- private_drawLine(cell, doc, style, JV.PROP_RIGHT, [JV.PROP_RIGHT, JV.PROP_TOP],[JV.PROP_RIGHT, JV.PROP_BOTTOM], mergedBand, styles);
|
|
|
- private_drawLine(cell, doc, style, JV.PROP_BOTTOM, [JV.PROP_RIGHT, JV.PROP_BOTTOM],[JV.PROP_LEFT, JV.PROP_BOTTOM], mergedBand, styles);
|
|
|
- private_drawLine(cell, doc, style, JV.PROP_LEFT, [JV.PROP_LEFT, JV.PROP_BOTTOM],[JV.PROP_LEFT, JV.PROP_TOP], mergedBand, styles);
|
|
|
+ let isNeedMergeBand = private_chkIfInMergedBand(mergedBand, cell);
|
|
|
+ private_drawLine(cell, doc, style, JV.PROP_TOP, [JV.PROP_LEFT, JV.PROP_TOP],[JV.PROP_RIGHT, JV.PROP_TOP], mergedBand, styles, isNeedMergeBand);
|
|
|
+ private_drawLine(cell, doc, style, JV.PROP_RIGHT, [JV.PROP_RIGHT, JV.PROP_TOP],[JV.PROP_RIGHT, JV.PROP_BOTTOM], mergedBand, styles, isNeedMergeBand);
|
|
|
+ private_drawLine(cell, doc, style, JV.PROP_BOTTOM, [JV.PROP_RIGHT, JV.PROP_BOTTOM],[JV.PROP_LEFT, JV.PROP_BOTTOM], mergedBand, styles, isNeedMergeBand);
|
|
|
+ private_drawLine(cell, doc, style, JV.PROP_LEFT, [JV.PROP_LEFT, JV.PROP_BOTTOM],[JV.PROP_LEFT, JV.PROP_TOP], mergedBand, styles, isNeedMergeBand);
|
|
|
}
|
|
|
private_drawCellText(cell, fonts, controls);
|
|
|
doc.restore();
|
|
|
|
|
|
}
|
|
|
|
|
|
- function private_drawLine(cell, doc, style, styleBorderDest, startP, destP, mergedBand, styles) {
|
|
|
+ function private_drawLine(cell, doc, style, styleBorderDest, startP, destP, mergedBand, styles, isNeedMergeBand) {
|
|
|
//doc.beginPath();
|
|
|
- var destStyle = style;
|
|
|
+ let destStyle = style;
|
|
|
if (mergedBand) {
|
|
|
- if (mergedBand[styleBorderDest] == cell[JV.PROP_AREA][styleBorderDest]) {
|
|
|
+ if (isNeedMergeBand && parseFloat(mergedBand[styleBorderDest]) === parseFloat(cell[JV.PROP_AREA][styleBorderDest])) {
|
|
|
destStyle = styles[mergedBand[JV.PROP_STYLE][JV.PROP_ID]];
|
|
|
}
|
|
|
}
|
|
|
doc.moveTo(cell[JV.PROP_AREA][startP[0]] + offsetX, cell[JV.PROP_AREA][startP[1]] + offsetY);
|
|
|
- if (destStyle[styleBorderDest] && destStyle[styleBorderDest][JV.PROP_LINE_WEIGHT] != 0) {
|
|
|
+ if (destStyle[styleBorderDest] && parseFloat(destStyle[styleBorderDest][JV.PROP_LINE_WEIGHT]) !== 0) {
|
|
|
doc.lineWidth(1.0 * destStyle[styleBorderDest][JV.PROP_LINE_WEIGHT]);
|
|
|
doc.lineTo(cell[JV.PROP_AREA][destP[0]] + offsetX, cell[JV.PROP_AREA][destP[1]] + offsetY);
|
|
|
doc.strokeColor(destStyle[styleBorderDest][JV.PROP_COLOR]);
|
|
@@ -84,12 +109,24 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
}
|
|
|
function private_drawCellText(cell, fonts, controls) {
|
|
|
if (cell[JV.PROP_VALUE]) {
|
|
|
- var values = ("" + cell[JV.PROP_VALUE]).split('|');
|
|
|
- var font = fonts[cell[JV.PROP_FONT]];
|
|
|
- var control = controls[cell[JV.PROP_CONTROL]];
|
|
|
- var height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
- var area = [cell[JV.PROP_AREA][JV.PROP_LEFT] + offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + offsetY];
|
|
|
- for (var i = 0; i < values.length; i++) {
|
|
|
+ let values = ("" + cell[JV.PROP_VALUE]).split('|');
|
|
|
+ // let font = fonts[cell[JV.PROP_FONT]];
|
|
|
+ let font = null;
|
|
|
+ if (typeof cell[JV.PROP_FONT] === "string") {
|
|
|
+ font = fonts[cell[JV.PROP_FONT]];
|
|
|
+ } else {
|
|
|
+ font = cell[JV.PROP_FONT];
|
|
|
+ }
|
|
|
+ // let control = controls[cell[JV.PROP_CONTROL]];
|
|
|
+ let control = null;
|
|
|
+ if (typeof cell[JV.PROP_CONTROL] === "string") {
|
|
|
+ control = controls[cell[JV.PROP_CONTROL]];
|
|
|
+ } else {
|
|
|
+ control = cell[JV.PROP_CONTROL];
|
|
|
+ }
|
|
|
+ let height = cell[JV.PROP_AREA][JV.PROP_BOTTOM] - cell[JV.PROP_AREA][JV.PROP_TOP];
|
|
|
+ let area = [cell[JV.PROP_AREA][JV.PROP_LEFT] + offsetX, cell[JV.PROP_AREA][JV.PROP_TOP] + offsetY, cell[JV.PROP_AREA][JV.PROP_RIGHT] + offsetX, cell[JV.PROP_AREA][JV.PROP_BOTTOM] + offsetY];
|
|
|
+ for (let i = 0; i < values.length; i++) {
|
|
|
area[JV.IDX_TOP] = cell[JV.PROP_AREA][JV.PROP_TOP] + i * (height / values.length) + offsetY;
|
|
|
area[JV.IDX_BOTTOM] = cell[JV.PROP_AREA][JV.PROP_TOP] + (i + 1) * (height / values.length) + offsetY;
|
|
|
private_drawText(values[i], area, font, control);
|
|
@@ -98,22 +135,22 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
}
|
|
|
|
|
|
function private_drawText(val, area, font, control) {
|
|
|
- var dftFontHeight = 12;
|
|
|
- var output = [];
|
|
|
+ let dftFontHeight = 12;
|
|
|
+ let output = [];
|
|
|
if (font) {
|
|
|
dftFontHeight = 1 * font[JV.FONT_PROPS[1]];
|
|
|
- var dftFontBold = font[JV.FONT_PROPS[3]];
|
|
|
- var dftFontItalic = font[JV.FONT_PROPS[4]];
|
|
|
- if (dftFontBold && dftFontBold == 'T') {
|
|
|
+ let dftFontBold = font[JV.FONT_PROPS[3]];
|
|
|
+ let dftFontItalic = font[JV.FONT_PROPS[4]];
|
|
|
+ if (dftFontBold && dftFontBold === 'T') {
|
|
|
doc.font(__dirname+'/pdf_base_files/hwxsb.ttf');
|
|
|
- }else if(dftFontItalic && dftFontItalic == 'T'){
|
|
|
+ }else if(dftFontItalic && dftFontItalic === 'T'){
|
|
|
doc.font(__dirname+'/pdf_base_files/Smart-italic.ttf');
|
|
|
}else {
|
|
|
doc.font(__dirname+'/pdf_base_files/Smart.ttf');
|
|
|
}
|
|
|
doc.fontSize(dftFontHeight);
|
|
|
}
|
|
|
- var options={};
|
|
|
+ let options={};
|
|
|
if (control) {
|
|
|
private_setupAreaH(area, control.Horizon, font.FontAngle, dftFontHeight, output,options);
|
|
|
private_setupAreaV(area, control.Vertical, font.FontAngle, dftFontHeight, output);
|
|
@@ -121,8 +158,8 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
private_setupAreaH(area, "left", font.FontAngle, dftFontHeight, output,options);
|
|
|
private_setupAreaV(area, "bottom", font.FontAngle, dftFontHeight, output);
|
|
|
}
|
|
|
- var w = area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - area[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
|
|
|
- if (font.FontAngle != "0") {
|
|
|
+ let w = area[JV.IDX_RIGHT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT] - area[JV.IDX_LEFT] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_RIGHT];
|
|
|
+ if (parseInt(font.FontAngle) !== 0) {
|
|
|
w = area[JV.IDX_BOTTOM] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] - area[JV.IDX_TOP] - JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
|
}
|
|
|
doc.save();
|
|
@@ -142,8 +179,8 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- var rotateOptions;
|
|
|
- if (font.FontAngle != "0") {
|
|
|
+ let rotateOptions;
|
|
|
+ if (parseInt(font.FontAngle) !== 0) {
|
|
|
if (control){
|
|
|
rotateOptions=private_setupAreaRotateOption(area,w,control.Vertical,dftFontHeight, output);
|
|
|
}else {
|
|
@@ -156,15 +193,15 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
}
|
|
|
|
|
|
function private_setupAreaH(area, type, fontAngle, dftFontHeight, outputPoint,options) {
|
|
|
- var lType = type;
|
|
|
- if (type != "left" && type != "right" && type != "center") lType = "left";
|
|
|
+ let lType = type;
|
|
|
+ if (type !== "left" && type !== "right" && type !== "center") lType = "left";
|
|
|
options.align=lType;
|
|
|
outputPoint[0]=1 * area[JV.IDX_LEFT]+ JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
|
|
|
}
|
|
|
|
|
|
function private_setupAreaV(area, type, fontAngle, dftFontHeight, outputPoint) {
|
|
|
- var lType = type;
|
|
|
- if (type != "top" && type != "bottom" && type != "center") lType = "top";
|
|
|
+ let lType = type;
|
|
|
+ if (type !== "top" && type !== "bottom" && type !== "center") lType = "top";
|
|
|
switch (lType) {
|
|
|
case "top":
|
|
|
outputPoint[1] = 1 * area[JV.IDX_TOP] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
@@ -179,13 +216,12 @@ function export_pdf_file (pageData, paperSize, fName, callback) {
|
|
|
}
|
|
|
|
|
|
function private_setupAreaRotateOption(area,w, type="top",dftFontHeight,outputPoint){
|
|
|
- var x = (area[JV.IDX_RIGHT] - area[JV.IDX_LEFT])/2+area[JV.IDX_LEFT];
|
|
|
- var y =(area[JV.IDX_BOTTOM] - area[JV.IDX_TOP])/2+ area[JV.IDX_TOP];
|
|
|
- var rotateOptions = {origin:[x,y]};
|
|
|
- var h = area[JV.IDX_RIGHT] - area[JV.IDX_LEFT];
|
|
|
+ let x = (area[JV.IDX_RIGHT] - area[JV.IDX_LEFT])/2+area[JV.IDX_LEFT];
|
|
|
+ let y =(area[JV.IDX_BOTTOM] - area[JV.IDX_TOP])/2+ area[JV.IDX_TOP];
|
|
|
+ let rotateOptions = {origin:[x,y]};
|
|
|
+ let h = area[JV.IDX_RIGHT] - area[JV.IDX_LEFT];
|
|
|
outputPoint[0]=x-w/2+JV.OUTPUT_OFFSET[JV.OFFSET_IDX_LEFT];
|
|
|
- var lType = type;
|
|
|
- switch (lType) {
|
|
|
+ switch (type) {
|
|
|
case "top":
|
|
|
outputPoint[1] = y- h/2+ JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP];
|
|
|
break;
|