UNPKG

pdfmake

Version:

Client/server side PDF printing in pure JavaScript

69 lines (55 loc) 1.77 kB
'use strict'; var isArray = require('./helpers').isArray; function typeName(bold, italics) { var type = 'normal'; if (bold && italics) { type = 'bolditalics'; } else if (bold) { type = 'bold'; } else if (italics) { type = 'italics'; } return type; } function FontProvider(fontDescriptors, pdfKitDoc) { this.fonts = {}; this.pdfKitDoc = pdfKitDoc; this.fontCache = {}; for (var font in fontDescriptors) { if (fontDescriptors.hasOwnProperty(font)) { var fontDef = fontDescriptors[font]; this.fonts[font] = { normal: fontDef.normal, bold: fontDef.bold, italics: fontDef.italics, bolditalics: fontDef.bolditalics }; } } } FontProvider.prototype.getFontType = function (bold, italics) { return typeName(bold, italics); }; FontProvider.prototype.getFontFile = function (familyName, bold, italics) { var type = this.getFontType(bold, italics); if (!this.fonts[familyName] || !this.fonts[familyName][type]) { return null; } return this.fonts[familyName][type]; }; FontProvider.prototype.provideFont = function (familyName, bold, italics) { var type = this.getFontType(bold, italics); if (this.getFontFile(familyName, bold, italics) === null) { throw new Error('Font \'' + familyName + '\' in style \'' + type + '\' is not defined in the font section of the document definition.'); } this.fontCache[familyName] = this.fontCache[familyName] || {}; if (!this.fontCache[familyName][type]) { var def = this.fonts[familyName][type]; if (!isArray(def)) { def = [def]; } this.fontCache[familyName][type] = this.pdfKitDoc.font.apply(this.pdfKitDoc, def)._font; } return this.fontCache[familyName][type]; }; module.exports = FontProvider;