const { FONT_SIZE_PX, getLayoutForFormat, getPageDimensions, getLineLimit, escapeXml, mmToPx } = require('./page-layout'); const { layoutTextToPaths, wrapTextToLinesByWidth, measureTextWidthPx, TAB_MARKER } = require('./svg-font-engine'); // Höhe einer Signatur in Seiten-Pixeln (Signatur-Canvas war 600×160; wir reservieren 160px * scale) const SIG_CANVAS_W = 600; const SIG_CANVAS_H = 160; /** * Extrahiert Path- und Polyline-Elemente aus einem SVG-String und gibt sie als * umgeformte -Gruppe zurück, die an Position (x, y) mit Skalierung scale eingebettet ist. */ function buildSignatureElement(svgString, x, y, scale) { if (!svgString || typeof svgString !== 'string') return ''; // viewBox der Signatur lesen, damit beliebige Quell-SVGs (z.B. Illustrator- // Export mit eigener viewBox) korrekt normiert werden statt fix auf den // 600×160-Zeichen-Canvas. Ohne viewBox: Fallback auf den Canvas (Alt-Signaturen). let minx = 0; let miny = 0; let vh = SIG_CANVAS_H; const vbM = svgString.match(/viewBox\s*=\s*"([^"]+)"/i); if (vbM) { const p = vbM[1].trim().split(/[\s,]+/).map(Number); if (p.length === 4 && p[2] > 0 && p[3] > 0) { minx = p[0]; miny = p[1]; vh = p[3]; } } // Skala auf die Eigen-Höhe beziehen: Canvas-Signaturen (vh=160) unverändert, // hochgeladene SVGs werden auf dieselbe Zielhöhe eingepasst. const s = scale * (SIG_CANVAS_H / vh); // Alle Zeichen-Elemente extrahieren und IMMER als Single-Stroke ausgeben: // fill:none + schwarzer Stroke inline; Klasse/Style/fill/stroke/width/height // entfernen. So gehen per