printmaker
Version:
Generate PDF documents and from JavaScript objects
56 lines • 2.88 kB
JavaScript
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