Postkarten-Layout: Text links, Absender+Empfänger rechts, Briefmarkenfeld frei
All checks were successful
Build & Deploy / deploy (push) Successful in 13s
All checks were successful
Build & Deploy / deploy (push) Successful in 13s
Neues render_format-kind 'postkarte'. generatePostcardSVG setzt den Text auf die linke Kartenhälfte, Absender (klein, oben) und Empfänger (Anschriftzone unten) auf die rechte Hälfte; oben rechts bleibt das Briefmarkenfeld frei. Ein SVG je Karte (ein Plotter-Durchlauf), geschrieben als letter_NNN.svg. - page-layout: kind je Format mitführen + getFormatKind(). - svg-generator: generatePostcardSVG (Body/Absender/Empfänger über Marker [[pk_abs]]/[[pk_adr]] getrennt, damit alle Teile scriptalisiert werden). - order-/preview-/directus-controller: type 'postcard' dispatchen, Marker in der Scriptalisierung erhalten, Postkarten-Dokument aus render_format-kind bauen. - directus-service: kind aus render_formats mitladen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -7,6 +7,7 @@ const { scriptalizeBatch } = require("../../services/scriptalizer-service");
|
||||
const {
|
||||
generateLetterSVG,
|
||||
generateEnvelopeSVG,
|
||||
generatePostcardSVG,
|
||||
generateLetterPages,
|
||||
} = require("../../lib/svg-generator");
|
||||
const {
|
||||
@@ -101,7 +102,7 @@ async function generateBatch(req, res, next) {
|
||||
for (const letter of processedLetters) {
|
||||
const raw = letter.processedText;
|
||||
// Splitten an \t UND [[signaturN]] (mit capture-Gruppe → Marker bleiben erhalten)
|
||||
const parts = raw.split(/(\t|\[\[signatur\d+\]\]|\[\[seitenumbruch\]\]|[&|])/gi);
|
||||
const parts = raw.split(/(\t|\[\[signatur\d+\]\]|\[\[seitenumbruch\]\]|\[\[pk_abs\]\]|\[\[pk_adr\]\]|[&|])/gi);
|
||||
const segments = [], markers = [];
|
||||
for (let i = 0; i < parts.length; i++) {
|
||||
if (i % 2 === 0) segments.push(parts[i]);
|
||||
@@ -177,6 +178,19 @@ async function generateBatch(req, res, next) {
|
||||
lineCount: svgResult.lineCount, lineLimit: svgResult.lineLimit, overflow: svgResult.overflow,
|
||||
recipientName: null,
|
||||
});
|
||||
} else if (letter.type === "postcard") {
|
||||
const svgResult = generatePostcardSVG(scriptalizedText, letter.format, {
|
||||
font: letter.font, realisticHandwriting: letter.realisticHandwriting ?? false,
|
||||
fontScale: letter.fontScale, senderScale: letter.senderScale || 1,
|
||||
});
|
||||
if (svgResult.overflow) hasOverflow = true;
|
||||
const filename = `letter_${pad}.svg`;
|
||||
await fs.writeFile(path.join(sessionDir, filename), svgResult.svg, "utf8");
|
||||
files.push({
|
||||
index: absoluteIndex, filename, url: `/api/preview/${finalSessionId}/${filename}`,
|
||||
lineCount: svgResult.lineCount, lineLimit: svgResult.lineLimit, overflow: svgResult.overflow,
|
||||
recipientName,
|
||||
});
|
||||
} else if (letter.multiPage) {
|
||||
// Mehrseitiger Brief: Text fließt über N Seiten – kein Überlauf-Fehler.
|
||||
const { pages } = generateLetterPages(scriptalizedText, letter.format, {
|
||||
|
||||
Reference in New Issue
Block a user