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..f96c204 --- /dev/null +++ b/measure-text.js @@ -0,0 +1,19 @@ +'use strict'; + +var path = require('path'); +var fs = require('fs'); +var PDFDocument = require('pdfkit'); + +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) { + return doc.widthOfString(str); +} \ No newline at end of file diff --git a/package.json b/package.json index 1925b33..0e44c43 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",