Motiv-Entwurf eingepasst (meet, in Trim-Fläche) + sevDesk-Diagnose-Logs

- Motiv-A6-Layout: Motiv vollständig in 148×105 eingepasst (meet, mittig) auf
  weißem A6-Grund statt randabfallend beschnitten (slice).
- skrift-sevdesk: Lade-Log (Token gesetzt/fehlt) + Logs je Auftrag (source-Gate,
  bereits erstellt) zur Diagnose, warum ggf. nichts erzeugt wird.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
s4luorth
2026-09-18 11:48:09 +02:00
parent 2c9ffbbc9b
commit f4ce602b7a
2 changed files with 15 additions and 5 deletions

View File

@@ -211,9 +211,11 @@ const handler = (router, { services, getSchema, logger }) => {
if (!meta?.filename_disk) throw new Error(`Motiv-Datei ${fileId} nicht gefunden.`);
const base64 = fs.readFileSync(path.join(UPLOAD_ROOT, meta.filename_disk)).toString('base64');
const mime = meta.type || 'image/png';
// A6 quer randabfallend: Motiv füllt die volle Beschnittfläche (cover), mittig.
// A6 quer: Motiv wird VOLLSTÄNDIG in die Trim-Fläche (148×105) eingepasst
// (mittig, nichts beschnitten) auf weißem A6-Grund inkl. 2 mm Beschnitt.
const svg = `<svg xmlns="http://www.w3.org/2000/svg" width="152mm" height="109mm" viewBox="0 0 152 109">`
+ `<image href="data:${mime};base64,${base64}" x="0" y="0" width="152" height="109" preserveAspectRatio="xMidYMid slice"/>`
+ `<rect x="0" y="0" width="152" height="109" fill="#ffffff"/>`
+ `<image href="data:${mime};base64,${base64}" x="2" y="2" width="148" height="105" preserveAspectRatio="xMidYMid meet"/>`
+ `</svg>`;
const files = new FilesService({ schema, accountability: null });
const storage = (process.env.STORAGE_LOCATIONS || 'local').split(',')[0].trim() || 'local';