import { readFileSync } from 'node:fs' import * as fontkitModul from 'fontkit' /** * PDF der Auftragsbestätigung (A4, pdfkit): Schriften und Zeichenabdeckung, Daten (alle Texte fertig formatiert), * Seitenaufteilung (rein) und Zeichnen. Aufbau der Datei: 1 Schriften, 2 Daten, 3 Layout, 4 Zeichnen, 5 erzeugeAuftragPdf. */ // ===== 1. Schriften, Logo, Zeichenabdeckung ===== const fontkit = fontkitModul.default ?? fontkitModul const SCHRIFT_VERZEICHNIS = new URL('../../assets/fonts/', import.meta.url) const LOGO_DATEI = new URL('../../../public/webklar-logo.png', import.meta.url) const SCHRIFT_DATEIEN = Object.freeze({ regular: 'Figtree-Regular.ttf', semibold: 'Figtree-SemiBold.ttf' }) let geladen = null /** { regular: Buffer, semibold: Buffer, logo: Buffer, regularFont, semiboldFont } – bei jedem Aufruf dasselbe Objekt. */ export function ladeSchriften() { if (!geladen) { const regular = readFileSync(new URL(SCHRIFT_DATEIEN.regular, SCHRIFT_VERZEICHNIS)) const semibold = readFileSync(new URL(SCHRIFT_DATEIEN.semibold, SCHRIFT_VERZEICHNIS)) geladen = Object.freeze({ regular, semibold, logo: readFileSync(LOGO_DATEI), regularFont: fontkit.create(regular), semiboldFont: fontkit.create(semibold), }) } return geladen } /** Hat der Codepunkt ein Glyph in Regular UND SemiBold? */ export function hatGlyph(codePoint) { const { regularFont, semiboldFont } = ladeSchriften() return regularFont.hasGlyphForCodePoint(codePoint) && semiboldFont.hasGlyphForCodePoint(codePoint) }