|  | @@ -4,10 +4,11 @@
 | 
	
		
			
				|  |  |   */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  let JV = require('../rpt_component/jpc_value_define');
 | 
	
		
			
				|  |  | -let pdf = require('pdfkit');
 | 
	
		
			
				|  |  | +// let pdf = require('pdfkit');
 | 
	
		
			
				|  |  |  let jpcCmnHelper = require('../rpt_component/helper/jpc_helper_common');
 | 
	
		
			
				|  |  |  let SCREEN_DPI = jpcCmnHelper.getScreenDPI();
 | 
	
		
			
				|  |  | -let fontUtil = require('./rpt_font_util');
 | 
	
		
			
				|  |  | +// let fontUtil = require('./rpt_font_util');
 | 
	
		
			
				|  |  | +let fontWidthMap = require('../rpt_component/helper/jpc_helper_font_width');
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  module.exports = {
 | 
	
		
			
				|  |  |      exportSvgStr: function (pagesData, offsetX, offsetY) {
 | 
	
	
		
			
				|  | @@ -16,7 +17,7 @@ module.exports = {
 | 
	
		
			
				|  |  |              fonts = pagesData[JV.NODE_FONT_COLLECTION],
 | 
	
		
			
				|  |  |              controls = pagesData[JV.NODE_CONTROL_COLLECTION]
 | 
	
		
			
				|  |  |          ;
 | 
	
		
			
				|  |  | -        let pdf_doc = new pdf({autoFirstPage: false});
 | 
	
		
			
				|  |  | +        // let pdf_doc = new pdf({autoFirstPage: false});
 | 
	
		
			
				|  |  |          for (let idx = 0; idx < pagesData.items.length; idx++) {
 | 
	
		
			
				|  |  |              let page = pagesData.items[idx];
 | 
	
		
			
				|  |  |              let svgPageArr = [], pixelSize = getPixelSize(pagesData);
 | 
	
	
		
			
				|  | @@ -24,7 +25,7 @@ module.exports = {
 | 
	
		
			
				|  |  |              let adjustY = 0.5 * ((idx + 1) % 2);
 | 
	
		
			
				|  |  |              // let cnt = 0;
 | 
	
		
			
				|  |  |              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, pdf_doc));
 | 
	
		
			
				|  |  | +                svgPageArr.push(buildCellSvg(cell, fonts, styles, controls, page[JV.PROP_PAGE_MERGE_BORDER], pagesData[JV.BAND_PROP_MERGE_BAND], offsetX, offsetY, adjustY));
 | 
	
		
			
				|  |  |                  // cnt++;
 | 
	
		
			
				|  |  |                  // console.log(cnt);
 | 
	
		
			
				|  |  |              }
 | 
	
	
		
			
				|  | @@ -55,7 +56,7 @@ function getActualBorderStyle(cell, styles, mergeBorderStyle, pageBorderArea, bo
 | 
	
		
			
				|  |  |      return rst;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY, adjustY, pdf_doc) {
 | 
	
		
			
				|  |  | +function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBorder, offsetX, offsetY, adjustY) {
 | 
	
		
			
				|  |  |      let rst = [];
 | 
	
		
			
				|  |  |      let style = styles[cell[JV.PROP_STYLE]];
 | 
	
		
			
				|  |  |      let mergeBandStyle = null;
 | 
	
	
		
			
				|  | @@ -101,18 +102,18 @@ function buildCellSvg(cell, fonts, styles, controls, pageMergeBorder, rptMergeBo
 | 
	
		
			
				|  |  |                  "' style='stroke:rgb(0,0,0);stroke-width:" + bottomBS[JV.PROP_LINE_WEIGHT] +"'/>")
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    buildText(rst, cell, font, controls[cell[JV.PROP_CONTROL]], offsetX, offsetY, adjustY, pdf_doc);
 | 
	
		
			
				|  |  | +    buildText(rst, cell, font, controls[cell[JV.PROP_CONTROL]], offsetX, offsetY, adjustY);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      return rst.join("");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, pdf_doc) {
 | 
	
		
			
				|  |  | +function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY) {
 | 
	
		
			
				|  |  |      let orgFontHeight = parseInt(font[JV.FONT_PROPS[JV.FONT_PROP_IDX_HEIGHT]]);
 | 
	
		
			
				|  |  |      let fontWeight = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_BOLD]] === 'T')?"bold":"normal";
 | 
	
		
			
				|  |  |      let fontStyle = (font[JV.FONT_PROPS[JV.FONT_PROP_IDX_ITALIC]] === 'T')?"italic":"normal";
 | 
	
		
			
				|  |  |      let dftFontBold = font[JV.FONT_PROPS[3]];
 | 
	
		
			
				|  |  |      let dftFontItalic = font[JV.FONT_PROPS[4]];
 | 
	
		
			
				|  |  | -    let fontFile = __dirname + '/pdf_base_files/' + fontUtil.getActualFont(font[JV.FONT_PROPS[0]], (dftFontBold === 'T'), (dftFontItalic === 'T')) + '.ttf';
 | 
	
		
			
				|  |  | +    // let fontFile = __dirname + '/pdf_base_files/' + fontUtil.getActualFont(font[JV.FONT_PROPS[0]], (dftFontBold === 'T'), (dftFontItalic === 'T')) + '.ttf';
 | 
	
		
			
				|  |  |      let left = parseInt(cell[JV.PROP_AREA][JV.PROP_LEFT]) + offsetX + 0.5,
 | 
	
		
			
				|  |  |          right = parseInt(cell[JV.PROP_AREA][JV.PROP_RIGHT]) + offsetX + 0.5,
 | 
	
		
			
				|  |  |          top = parseInt(cell[JV.PROP_AREA][JV.PROP_TOP]) + offsetY + adjustY,
 | 
	
	
		
			
				|  | @@ -148,9 +149,10 @@ function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, pdf_
 | 
	
		
			
				|  |  |      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];
 | 
	
		
			
				|  |  |      let inner_draw_text = function (textValue) {
 | 
	
		
			
				|  |  |          let dftFontHeight = orgFontHeight;
 | 
	
		
			
				|  |  | -        pdf_doc.font(fontFile);
 | 
	
		
			
				|  |  | -        pdf_doc.fontSize(dftFontHeight);
 | 
	
		
			
				|  |  | -        let actLines = private_splitString(textValue, (area[JV.PROP_RIGHT] - area[JV.PROP_LEFT]), pdf_doc);
 | 
	
		
			
				|  |  | +        // pdf_doc.font(fontFile);
 | 
	
		
			
				|  |  | +        // pdf_doc.fontSize(dftFontHeight);
 | 
	
		
			
				|  |  | +        // let actLines = private_splitString(textValue, (area[JV.PROP_RIGHT] - area[JV.PROP_LEFT]), pdf_doc);
 | 
	
		
			
				|  |  | +        let actLines = private_splitStringEx(textValue, (area[JV.PROP_RIGHT] - area[JV.PROP_LEFT]), font[JV.FONT_PROPS[0]], dftFontHeight);
 | 
	
		
			
				|  |  |          function inner_build_text(innerTxt, innerArea) {
 | 
	
		
			
				|  |  |              let innerDftFontHeight = (dftFontHeight * 3 / 4); //SVG的字体与canvas的字体大小的切换, 不用考虑取整
 | 
	
		
			
				|  |  |              if (control) {
 | 
	
	
		
			
				|  | @@ -177,10 +179,11 @@ function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, pdf_
 | 
	
		
			
				|  |  |              while (true) {
 | 
	
		
			
				|  |  |                  if (dftFontHeight > 6) {
 | 
	
		
			
				|  |  |                      dftFontHeight--;
 | 
	
		
			
				|  |  | -                    pdf_doc.fontSize(dftFontHeight);
 | 
	
		
			
				|  |  | +                    // pdf_doc.fontSize(dftFontHeight);
 | 
	
		
			
				|  |  |                      let lines = Math.floor((area[JV.IDX_BOTTOM] - area[JV.IDX_TOP]) / (dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + 4));
 | 
	
		
			
				|  |  |                      lines = (lines === 0)?1:lines;
 | 
	
		
			
				|  |  | -                    actLines = private_splitString(textValue, (area[JV.PROP_RIGHT] - area[JV.PROP_LEFT]), pdf_doc);
 | 
	
		
			
				|  |  | +                    // actLines = private_splitString(textValue, (area[JV.PROP_RIGHT] - area[JV.PROP_LEFT]), pdf_doc);
 | 
	
		
			
				|  |  | +                    let actLines = private_splitStringEx(textValue, (area[JV.PROP_RIGHT] - area[JV.PROP_LEFT]), font[JV.FONT_PROPS[0]], dftFontHeight);
 | 
	
		
			
				|  |  |                      if (lines >= actLines.length) {
 | 
	
		
			
				|  |  |                          let aH = dftFontHeight + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_BOTTOM] + JV.OUTPUT_OFFSET[JV.OFFSET_IDX_TOP] + 4;
 | 
	
		
			
				|  |  |                          if ((aH * actLines.length) < (area[JV.IDX_BOTTOM] - area[JV.IDX_TOP]) && (control && control.Vertical !== 'top')) {
 | 
	
	
		
			
				|  | @@ -250,12 +253,13 @@ function buildText(destRst, cell, font, control, offsetX, offsetY, adjustY, pdf_
 | 
	
		
			
				|  |  |      //*/
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function private_splitString(strVal, areaWidth, doc) {
 | 
	
		
			
				|  |  | +function private_splitStringEx(strVal, areaWidth, chkFontName, chkFontHeight) {
 | 
	
		
			
				|  |  |      let rst = [];
 | 
	
		
			
				|  |  |      if (strVal) {
 | 
	
		
			
				|  |  |          let preSIdx = 0, txtWidth = 0;
 | 
	
		
			
				|  |  |          let currentW = 0;
 | 
	
		
			
				|  |  | -        let chnW = doc.widthOfString('一'), otherW = doc.widthOfString('_');
 | 
	
		
			
				|  |  | +        // let chnW = doc.widthOfString('一'), otherW = doc.widthOfString('_');
 | 
	
		
			
				|  |  | +        let chnW = fontWidthMap.getFontWidth(chkFontName, chkFontHeight, '宽'), otherW = fontWidthMap.getFontWidth(chkFontName, chkFontHeight, '窄');
 | 
	
		
			
				|  |  |          for (let sIdx = 0; sIdx < strVal.length; sIdx++) {
 | 
	
		
			
				|  |  |              currentW = (strVal.charCodeAt(sIdx) > 127)?chnW:otherW;
 | 
	
		
			
				|  |  |              txtWidth += currentW;
 |