From e2fbb584c7e42ae2637e92c2e66671ecfb7ac52f Mon Sep 17 00:00:00 2001 From: ForbesLindesay Date: Tue, 21 Jul 2015 11:31:27 +0100 Subject: [PATCH 1/2] Use pdfkit instead of canvas --- badge.js | 17 +++-------------- measure-text.js | 13 +++++++++++++ package.json | 2 +- 3 files changed, 17 insertions(+), 15 deletions(-) create mode 100644 measure-text.js diff --git a/badge.js b/badge.js index a2c435f..37206e7 100644 --- a/badge.js +++ b/badge.js @@ -2,18 +2,7 @@ var fs = require('fs'); var path = require('path'); var SVGO = require('svgo'); var dot = require('dot'); - -// Initialize what will be used for automatic text measurement. -var Canvas = require('canvas'); -var canvasElement = new Canvas(0, 0); // Width and height are irrelevant. -var canvasContext = canvasElement.getContext('2d'); -var CanvasFont = Canvas.Font; -try { - var opensans = new CanvasFont('Verdana', - path.join(__dirname, 'Verdana.ttf')); - canvasContext.addFont(opensans); -} catch(e) {} -canvasContext.font = '11px Verdana, "DejaVu Sans"'; +var measureTextWidth = require('./measure-text'); // cache templates. var templates = {}; @@ -75,9 +64,9 @@ function makeImage(data, cb) { data.logoPadding = 0; } data.widths = [ - (canvasContext.measureText(data.text[0]).width|0) + 10 + (measureTextWidth(data.text[0])|0) + 10 + data.logoWidth + data.logoPadding, - (canvasContext.measureText(data.text[1]).width|0) + 10, + (measureTextWidth(data.text[1])|0) + 10, ]; if (data.links === undefined) { data.links = ['', '']; diff --git a/measure-text.js b/measure-text.js new file mode 100644 index 0000000..0aeb920 --- /dev/null +++ b/measure-text.js @@ -0,0 +1,13 @@ +'use strict'; + +var path = require('path'); +var PDFDocument = require('pdfkit'); + +var doc = (new PDFDocument({size:'A4', layout:'landscape'})) + .font(path.join(__dirname, 'Verdana.ttf')) + .fontSize(11); + +module.exports = measure; +function measure(str) { + return doc.widthOfString(str); +} \ No newline at end of file diff --git a/package.json b/package.json index 884e7e3..43f294e 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "dependencies": { "dot": "~1.0.3", "svgo": "~0.5.1", - "canvas": "~1.1.2", + "pdfkit": "~0.7.1", "phantomjs": "~1.9.2-6", "es6-promise": "~2.1.0", "request": "~2.55.0", From 36b664fc45ae2bdffaa6d1becc6d97d078e0b4b8 Mon Sep 17 00:00:00 2001 From: ForbesLindesay Date: Wed, 22 Jul 2015 17:31:24 +0100 Subject: [PATCH 2/2] Support fallback font when Verdana isn't available --- measure-text.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/measure-text.js b/measure-text.js index 0aeb920..f96c204 100644 --- a/measure-text.js +++ b/measure-text.js @@ -1,11 +1,17 @@ 'use strict'; var path = require('path'); +var fs = require('fs'); var PDFDocument = require('pdfkit'); -var doc = (new PDFDocument({size:'A4', layout:'landscape'})) - .font(path.join(__dirname, 'Verdana.ttf')) - .fontSize(11); +var doc = (new PDFDocument({size:'A4', layout:'landscape'})); +try { + doc = doc.font(path.join(__dirname, 'Verdana.ttf')); +} catch (ex) { + doc = doc.font('Helvetica-Bold') + console.warn('Could not load font file "Verdana.ttf", text widths will therefore be approximate', ex); +} +doc = doc.fontSize(11); module.exports = measure; function measure(str) {