From b65468fc4695aed8a1cdac6bdaf709b99d9eb886 Mon Sep 17 00:00:00 2001 From: Herman van Zyl Date: Tue, 30 Nov 2021 14:38:29 +0200 Subject: [PATCH] gridline improvements --- app/line-types/grid-line.js | 12 ++++++++++-- app/pdf-helpers.js | 23 +++++++++++++++++++++++ package-lock.json | 4 ++-- package.json | 4 ++-- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/app/line-types/grid-line.js b/app/line-types/grid-line.js index 24ab647..5c77e62 100644 --- a/app/line-types/grid-line.js +++ b/app/line-types/grid-line.js @@ -37,11 +37,18 @@ function generateLineThatIsGrid(doc, x, y, text, value, isNewPageHeader, headerC const {fontSize, boldFont, lightFont} = utils.setComponentFont("OpenSansSemiBold", "OpenSansLight", constants.NORMAL_FONT_SIZE, font); let index = 0; + + const pageTotalSize = doc.page.width - (constants.PD.MARGIN * 2); + const leftOverSize = Object.keys(gridHeaders).reduce((acc, item) => { + return acc - gridHeaders[item].size; + }, pageTotalSize); + + const amountToAddToColumns = leftOverSize / (Object.keys(gridHeaders).length - 1); + for (const gridHeader in gridHeaders) { if (Object.prototype.hasOwnProperty.call(gridHeaders, gridHeader)) { const header = gridHeaders[gridHeader]; - const width = (header.size + 100); - x = index === 0 ? x : x + width; // TODO: the + 100 can differ for size ranges perhaps + const width = (header.size + amountToAddToColumns); columnXStart[gridHeader] = x; columnWidth[gridHeader] = width; doc @@ -53,6 +60,7 @@ function generateLineThatIsGrid(doc, x, y, text, value, isNewPageHeader, headerC align: "left", }); index++; + x = index === 0 ? x : x + width; } } y += incrementY; diff --git a/app/pdf-helpers.js b/app/pdf-helpers.js index bb4acee..d06245f 100644 --- a/app/pdf-helpers.js +++ b/app/pdf-helpers.js @@ -207,6 +207,29 @@ class PDFHelpers { pdfType: constants.PDFType.DEFAULT, }; } + + setColumnNameAndWidth(columns, key, value, pdfLimiter) { // ensure length more than actual column name + const keyValue = this.getDisplayableTextValue(key); + const keyDocWidth = pdfLimiter.getStringWidth(keyValue); + // console.log(`key width: ${keyDocWidth}`) + let length = !value ? 0 : pdfLimiter.getStringWidth(value); + // console.log(`value ${value}, width: ${length}`) + length = length > keyDocWidth ? length : keyDocWidth; + if (Object.prototype.hasOwnProperty.call(columns, key)) { + // just do value size check and ensure value is the largest one available + const size = pdfLimiter.getStringWidth(columns[key]); + if (length > size) { + columns[key].size = length; + } + } else { + // value size check and name + columns[key] = { + name: this.getDisplayableTextValue(key), + size: length, + }; + } + return columns; + } } module.exports.PDFHelpers = PDFHelpers; diff --git a/package-lock.json b/package-lock.json index e7dd6ad..9dc6c75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@thisisme/pdfgeneration-lib", - "version": "6.5.0", + "version": "6.6.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@thisisme/pdfgeneration-lib", - "version": "6.5.0", + "version": "6.6.0", "dependencies": { "aws-sdk": "2.978.0", "bwip-js": "3.0.4", diff --git a/package.json b/package.json index 3d6784c..a60aec9 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "@thisisme/pdfgeneration-lib", - "version": "6.5.0", + "version": "6.6.0", "private": true, "main": "app.js", "dependencies": { - "aws-sdk": "2.978.0", + "aws-sdk": "2.1039.0", "bwip-js": "3.0.4", "cloc": "^2.8.0", "concat-stream": "2.0.0",