|
@@ -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;
|