diff --git a/src/api/controllers/directus-controller.js b/src/api/controllers/directus-controller.js index 6df91b9..d68faa1 100644 --- a/src/api/controllers/directus-controller.js +++ b/src/api/controllers/directus-controller.js @@ -169,6 +169,7 @@ async function generateFromDirectus(req, res, next) { rawText: order.text_template || null, // Absender fürs Kuvert (manuelle Aufträge): oben links, Empfänger unten rechts. envelopeSender: order.envelope_sender || null, + envelopeSenderScale: Number(order.envelope_sender_scale) || 1, }, }); diff --git a/src/api/controllers/order-controller.js b/src/api/controllers/order-controller.js index a392c66..2f11c17 100644 --- a/src/api/controllers/order-controller.js +++ b/src/api/controllers/order-controller.js @@ -330,7 +330,7 @@ async function runGeneration({ orderNumber, letters, metadata }) { if (isEnv) { svgResult = generateEnvelopeSVG( scriptalizedText, letter.format, letter.envelopeType, - { font: letter.font, realisticHandwriting: letter.realisticHandwriting ?? false, fontScale: letter.fontScale, sender: metadata.envelopeSender || '' } + { font: letter.font, realisticHandwriting: letter.realisticHandwriting ?? false, fontScale: letter.fontScale, sender: metadata.envelopeSender || '', senderScale: metadata.envelopeSenderScale || 1 } ); } else { svgResult = generateLetterSVG( diff --git a/src/api/controllers/preview-controller.js b/src/api/controllers/preview-controller.js index ced7834..912401c 100644 --- a/src/api/controllers/preview-controller.js +++ b/src/api/controllers/preview-controller.js @@ -167,7 +167,7 @@ async function generateBatch(req, res, next) { if (letter.type === "envelope") { const svgResult = generateEnvelopeSVG( scriptalizedText, letter.format, letter.envelopeType, - { font: letter.font, realisticHandwriting: letter.realisticHandwriting ?? false, fontScale: letter.fontScale, sender: letter.sender || '' } + { font: letter.font, realisticHandwriting: letter.realisticHandwriting ?? false, fontScale: letter.fontScale, sender: letter.sender || '', senderScale: letter.senderScale || 1 } ); if (svgResult.overflow) hasOverflow = true; const filename = `envelope_${pad}.svg`; diff --git a/src/lib/svg-generator.js b/src/lib/svg-generator.js index 594a7aa..7eb7975 100644 --- a/src/lib/svg-generator.js +++ b/src/lib/svg-generator.js @@ -357,11 +357,14 @@ function generateEnvelopeSVG(text, format, type, options = {}) { }); } - // Absender oben links (kleiner) – nur wenn gesetzt und kein zentrierter Freitext. + // Absender oben links – nur wenn gesetzt und kein zentrierter Freitext. const absender = String(options.sender || '').trim(); if (absender && type !== 'custom') { - const absSize = fontSizePx * 0.62; - const absLH = lineHeightPx * 0.62; + // Eigene Absender-Größe (Prozent, 1 = 100%). Grundgröße = Empfänger-Grundschrift + // (früher fix 0.62 → zu klein). Über options.senderScale prozentual einstellbar. + const senderScale = Math.max(0.5, Math.min(2, Number(options.senderScale) || 1)); + const absSize = FONT_SIZE_PX * senderScale; + const absLH = lineHeightPx * (absSize / fontSizePx); const absLines = absender.split('\n').map((l) => l.replace(/\s+$/, '')); const absPaths = layoutTextToPaths({ lines: absLines, diff --git a/src/services/directus-service.js b/src/services/directus-service.js index 17ae8c3..ce81afd 100644 --- a/src/services/directus-service.js +++ b/src/services/directus-service.js @@ -41,7 +41,7 @@ async function directusFetch(path, options = {}) { async function fetchOrder(orderId) { const fields = [ 'id', 'order_number', 'customer_email', 'font', 'status', - 'needs_envelope', 'envelope_labeling', 'envelope_text', 'envelope_format', 'envelope_sender', + 'needs_envelope', 'envelope_labeling', 'envelope_text', 'envelope_format', 'envelope_sender', 'envelope_sender_scale', 'text_template', 'motif_mode', 'own_cards', 'entries_count', 'preview_session', 'source_file', 'product.key', 'product.type', 'product.input_mode', 'format.key', 'font_scale_letter', 'font_scale_envelope', 'signatures_manual', 'multi_page', 'realistic',