UNPKG

printmaker

Version:

Generate PDF documents and from JavaScript objects

56 lines 2.88 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { parseBinaryData } from './binary-data.js'; import { asArray, asBoolean, asObject, check, getFrom, optional, pickDefined, required, } from './types.js'; export function parseFonts(input) { var _a; const obj = (_a = check(input, 'fonts', optional(asObject))) !== null && _a !== void 0 ? _a : {}; return Object.entries(obj).flatMap(([name, fontDef]) => { const array = check(fontDef, `fonts['${name}']`, required(asArray)); return array.map((fontDef, idx) => { const font = check(fontDef, `fonts['${name}'][${idx}]`, required(parseFont)); return Object.assign({ name }, font); }); }); } export function parseFont(def) { return pickDefined({ italic: getFrom(def, 'italic', optional(asBoolean)) || undefined, bold: getFrom(def, 'bold', optional(asBoolean)) || undefined, data: getFrom(def, 'data', required(parseBinaryData)), }); } export function embedFonts(fontDefs, doc) { return __awaiter(this, void 0, void 0, function* () { return yield Promise.all(fontDefs.map((def) => __awaiter(this, void 0, void 0, function* () { const pdfFont = yield doc.embedFont(def.data, { subset: true }).catch((error) => { var _a; throw new Error(`Could not embed font "${def.name}": ${(_a = error.message) !== null && _a !== void 0 ? _a : error}`); }); return pickDefined({ name: def.name, italic: def.italic, bold: def.bold, pdfFont }); }))); }); } export function selectFont(fonts, attrs) { var _a; const { fontFamily, italic, bold } = attrs; const font = (_a = fonts.find((font) => match(font, { fontFamily, italic, bold }))) === null || _a === void 0 ? void 0 : _a.pdfFont; if (!font) { const style = italic ? (bold ? 'bold italic' : 'italic') : bold ? 'bold' : 'normal'; throw new Error(`No font found for "${fontFamily} ${style}"`); } return font; } function match(font, selector) { return ((!selector.fontFamily || font.name === selector.fontFamily) && !font.italic === !selector.italic && !font.bold === !selector.bold); } //# sourceMappingURL=fonts.js.map