From f14597006e8553ee995e0220930cab6454abfcbe Mon Sep 17 00:00:00 2001 From: "Torsten Schulz (local)" Date: Thu, 23 Oct 2025 09:15:46 +0200 Subject: [PATCH] Refactor code structure for improved readability and maintainability --- scripts/create-fillable-template.js | 83 +++++++++++++-- scripts/fill-sample-template.js | 100 +++++++++++++++++++ server/templates/mitgliedschaft-fillable.pdf | Bin 14417 -> 17581 bytes temp/mitgliedschaft-sample-filled.pdf | Bin 0 -> 25655 bytes 4 files changed, 173 insertions(+), 10 deletions(-) create mode 100644 scripts/fill-sample-template.js create mode 100644 temp/mitgliedschaft-sample-filled.pdf diff --git a/scripts/create-fillable-template.js b/scripts/create-fillable-template.js index 9d95fff..8539b19 100644 --- a/scripts/create-fillable-template.js +++ b/scripts/create-fillable-template.js @@ -258,39 +258,42 @@ async function create() { const fieldWidth2 = 380 const labelOffset = 0 // place SEPA inputs 1cm left (≈28.35pt) from previous and slightly up; adjust to align with labels - const inputX = sepaLeft + 220 - 28.35 - // reduce vertical raise so inputs sit on same baseline as labels (previously too high) - const inputYAdjust = 6 + const inputX = sepaLeft + 220 - 28.35 + // reduce vertical raise so inputs sit on same baseline as labels (previously too high) + const inputYAdjust = 6 + 5.67 // Move SEPA inputs (except date) up by additional 2mm (≈5.67pt) + // adjust page2DownShift so inputs move up by 0.75mm (net) + // 0.75mm = 0.075cm -> ~2.12625 pt + const page2DownShift = 0.075 * 28.35 // 0.075 cm -> ~2.12625 pt // apply labelsShift only to the SEPA form labels/inputs so paragraphs remain unaffected let syFields = sy + labelsShift page2.drawText('Mitglied (Vorname und Name)', { x: sepaLeft + labelOffset, y: syFields, size: small, font: helv }) - form.createTextField('sepa_mitglied').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) + form.createTextField('sepa_mitglied').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust - page2DownShift, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) syFields -= lineGap * 1.1 page2.drawText('Kontoinhaber (Vorname und Name):', { x: sepaLeft + labelOffset, y: syFields, size: small, font: helv }) - form.createTextField('sepa_kontoinhaber').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) + form.createTextField('sepa_kontoinhaber').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust - page2DownShift, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) syFields -= lineGap * 1.1 page2.drawText('Straße und Hausnummer:', { x: sepaLeft + labelOffset, y: syFields, size: small, font: helv }) - form.createTextField('sepa_strasse').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) + form.createTextField('sepa_strasse').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust - page2DownShift, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) syFields -= lineGap * 1.1 page2.drawText('PLZ und Ort:', { x: sepaLeft + labelOffset, y: syFields, size: small, font: helv }) - form.createTextField('sepa_plz_ort').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) + form.createTextField('sepa_plz_ort').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust - page2DownShift, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) syFields -= lineGap * 1.1 page2.drawText('Kreditinstitut:', { x: sepaLeft + labelOffset, y: syFields, size: small, font: helv }) - form.createTextField('sepa_bank').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) + form.createTextField('sepa_bank').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust - page2DownShift, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) syFields -= lineGap * 1.1 page2.drawText('IBAN:', { x: sepaLeft + labelOffset, y: syFields, size: small, font: helv }) - form.createTextField('sepa_iban').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) + form.createTextField('sepa_iban').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust - page2DownShift, width: Math.round(fieldWidth2 * fieldShrinkFactor), height: fieldHeight2, font: helv }) syFields -= lineGap * 1.1 page2.drawText('BIC:', { x: sepaLeft + labelOffset, y: syFields, size: small, font: helv }) // BIC remains full width as requested - form.createTextField('sepa_bic').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust, width: 220, height: fieldHeight2, font: helv }) + form.createTextField('sepa_bic').addToPage(page2, { x: inputX, y: syFields - fieldHeight2 + 2 + inputYAdjust - page2DownShift, width: 220, height: fieldHeight2, font: helv }) syFields -= lineGap * 1.1 // add signature and date lines 2cm below last field @@ -444,6 +447,66 @@ Das Vereinsmitglied trifft die Entscheidung zur Veröffentlichung seiner Daten i py = drawWrappedOnPage3('folgende allgemeine Daten zu meiner Person:', leftX, py, normalSize, helv) py -= blockSpacing + // Rebuild a simple, single-column, non-overlapping form area on page 3 + const formLeft = leftX + const formFieldW = 360 + const formFieldH = 14 + const formGap = 22 + // start a bit lower to separate from the block text + py -= 28 + // Row layout + const colGap = 220 + // Shifts (in points): 1 cm = ~28.35 pt + const leftColShift = 0.3 * 28.35 // 0.3 cm -> ~8.505 pt + const vornameLabelShift = 1.0 * 28.35 // 1.0 cm -> ~28.35 pt + const vornameFieldShift = 1.3 * 28.35 // 1.3 cm -> ~36.855 pt + const leftColX = formLeft + leftColShift + const rightColX = formLeft + colGap + + // Row 1: Name (left) and Vorname (right) + // Keep the left label at the original formLeft, move only the input field slightly right by 0.1cm + const leftInputShift = 0.35 * 28.35 // 0.35 cm -> ~9.9225 pt + // extra small horizontal nudge for all non-date inputs: 1mm + const extraHShift = 0.1 * 28.35 // 0.1 cm (1 mm) -> ~2.835 pt + // vertical shift for all input fields (including date): 0.6 cm up + const verticalFieldShift = 0.6 * 28.35 // 0.6 cm -> ~17.01 pt + // downward nudge for non-date inputs requested now: 0.2 cm -> ~5.67 pt + const nonDateDownShift = 0.2 * 28.35 // 0.2 cm -> ~5.67 pt + page3.drawText('Name:', { x: formLeft, y: py, size: normalSize, font: helv }) + form.createTextField('page3_name').addToPage(page3, { x: formLeft + 70 + leftInputShift + extraHShift, y: py - formFieldH + verticalFieldShift - nonDateDownShift, width: 160, height: formFieldH, font: helv }) + // Vorname label and field moved further right as requested + page3.drawText('Vorname:', { x: rightColX + vornameLabelShift, y: py, size: normalSize, font: helv }) + form.createTextField('page3_vorname').addToPage(page3, { x: rightColX + 70 + vornameFieldShift + extraHShift, y: py - formFieldH + verticalFieldShift - nonDateDownShift, width: 160, height: formFieldH, font: helv }) + py -= formGap + // Anschrift (full width) + page3.drawText('Anschrift:', { x: formLeft, y: py, size: normalSize, font: helv }) + form.createTextField('page3_anschrift').addToPage(page3, { x: formLeft + 70 + leftInputShift + extraHShift, y: py - formFieldH + verticalFieldShift - nonDateDownShift, width: formFieldW + 40, height: formFieldH, font: helv }) + py -= formGap + // Row 3: Telefonnummer (left) and E-Mail (right) + // Keep left label at formLeft, shift only the input field by leftInputShift + page3.drawText('Telefonnummer:', { x: formLeft, y: py, size: normalSize, font: helv }) + form.createTextField('page3_telefon').addToPage(page3, { x: formLeft + 70 + leftInputShift + extraHShift, y: py - formFieldH + verticalFieldShift - nonDateDownShift, width: 160, height: formFieldH, font: helv }) + page3.drawText('E-Mail-Adresse:', { x: rightColX + vornameLabelShift, y: py, size: normalSize, font: helv }) + form.createTextField('page3_email').addToPage(page3, { x: rightColX + 70 + vornameFieldShift + extraHShift, y: py - formFieldH + verticalFieldShift - nonDateDownShift, width: 180, height: formFieldH, font: helv }) + py -= formGap + // remove fax field/label per request (space preserved) + py -= formGap + py -= formGap + // Date and signature line + const dateFieldW = 120 + page3.drawText('Frankfurt/Main-Harheim, den', { x: formLeft, y: py, size: normalSize, font: helv }) + const dateX = formLeft + helv.widthOfTextAtSize('Frankfurt/Main-Harheim, den ', normalSize) + // date field also moves up by verticalFieldShift (but not horizontally shifted by extraHShift) + // now move the date and signature line 0.2cm down as requested + const dateFieldY = py - formFieldH + verticalFieldShift - nonDateDownShift + form.createTextField('page3_datum').addToPage(page3, { x: dateX, y: dateFieldY, width: dateFieldW, height: formFieldH, font: helv }) + // signature line starts directly under the (moved) date field + page3.drawRectangle({ x: dateX, y: dateFieldY - 6, width: 300, height: 1, color: rgb(0,0,0) }) + // label under signature line + const sigLabel = 'Datum, Unterschrift (bei Jugendlichen gesetzlicher Vertreter)' + const sigLabelSize = 10 + page3.drawText(sigLabel, { x: dateX, y: dateFieldY - 18, size: sigLabelSize, font: helv }) + const pdfBytes = await pdfDoc.save() fs.writeFileSync('server/templates/mitgliedschaft-fillable.pdf', pdfBytes) console.log('Wrote server/templates/mitgliedschaft-fillable.pdf') diff --git a/scripts/fill-sample-template.js b/scripts/fill-sample-template.js new file mode 100644 index 0000000..f0239b0 --- /dev/null +++ b/scripts/fill-sample-template.js @@ -0,0 +1,100 @@ +import fs from 'fs' +import { PDFDocument, StandardFonts, rgb } from 'pdf-lib' + +async function fill() { + const templatePath = 'server/templates/mitgliedschaft-fillable.pdf' + if (!fs.existsSync(templatePath)) { + console.error('Template not found:', templatePath) + process.exit(1) + } + + const existingPdfBytes = fs.readFileSync(templatePath) + const pdfDoc = await PDFDocument.load(existingPdfBytes) + const form = pdfDoc.getForm() + + // Simple sample data + const sample = { + nachname: 'Müller', + vorname: 'Anna', + strasse: 'Hauptstr. 12', + plz_ort: '60389 Frankfurt', + geburtsdatum: '01.01.1990', + telefon: '069 123456', + email: 'anna.mueller@example.de', + telefon_mobil: '0151 2345678', + mitglied_aktiv: true, + mitglied_passiv: false, + sepa_mitglied: 'Anna Müller', + sepa_kontoinhaber: 'Anna Müller', + sepa_strasse: 'Hauptstr. 12', + sepa_plz_ort: '60389 Frankfurt', + sepa_bank: 'Sparkasse', + sepa_iban: 'DE00123456781234567890', + sepa_bic: 'PBNKDEFF', + sepa_datum: '23.10.2025', + sign_datum: '23.10.2025', + page3_name: 'Müller', + page3_vorname: 'Anna', + page3_anschrift: 'Hauptstr. 12, 60389 Frankfurt', + page3_telefon: '069 123456', + page3_fax: '069 654321', + page3_email: 'anna.mueller@example.de', + page3_datum: '23.10.2025' + } + + function safeSetText(name, value) { + try { + const f = form.getTextField(name) + f.setText(value) + } catch (e) { + // ignore missing fields + } + } + + safeSetText('nachname', sample.nachname) + safeSetText('vorname', sample.vorname) + safeSetText('strasse', sample.strasse) + safeSetText('plz_ort', sample.plz_ort) + safeSetText('geburtsdatum', sample.geburtsdatum) + safeSetText('telefon', sample.telefon) + safeSetText('email', sample.email) + safeSetText('telefon_mobil', sample.telefon_mobil) + + try { + const cbA = form.getCheckBox('mitglied_aktiv') + if (sample.mitglied_aktiv) cbA.check(); else cbA.uncheck() + } catch(e) {} + try { + const cbP = form.getCheckBox('mitglied_passiv') + if (sample.mitglied_passiv) cbP.check(); else cbP.uncheck() + } catch(e) {} + + safeSetText('sepa_mitglied', sample.sepa_mitglied) + safeSetText('sepa_kontoinhaber', sample.sepa_kontoinhaber) + safeSetText('sepa_strasse', sample.sepa_strasse) + safeSetText('sepa_plz_ort', sample.sepa_plz_ort) + safeSetText('sepa_bank', sample.sepa_bank) + safeSetText('sepa_iban', sample.sepa_iban) + safeSetText('sepa_bic', sample.sepa_bic) + safeSetText('sepa_datum', sample.sepa_datum) + safeSetText('sign_datum', sample.sign_datum) + + // page3 fields + safeSetText('page3_name', sample.page3_name) + safeSetText('page3_vorname', sample.page3_vorname) + safeSetText('page3_anschrift', sample.page3_anschrift) + safeSetText('page3_telefon', sample.page3_telefon) + safeSetText('page3_fax', sample.page3_fax) + safeSetText('page3_email', sample.page3_email) + safeSetText('page3_datum', sample.page3_datum) + + // flatten all fields + try { form.flatten() } catch (e) {} + + const out = await pdfDoc.save() + if (!fs.existsSync('temp')) fs.mkdirSync('temp') + fs.writeFileSync('temp/mitgliedschaft-sample-filled.pdf', out) + console.log('Wrote temp/mitgliedschaft-sample-filled.pdf') +} + +fill().catch(e => { console.error(e); process.exit(1) }) diff --git a/server/templates/mitgliedschaft-fillable.pdf b/server/templates/mitgliedschaft-fillable.pdf index f9021d745e4124480e285aedc4c23f79c9439c2e..2c9bd8903332f0e90022f65e437e6e0bc78b50e0 100644 GIT binary patch delta 5069 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 RWo8O7G%zwZ3MC~)Pev*ESw8>( diff --git a/temp/mitgliedschaft-sample-filled.pdf b/temp/mitgliedschaft-sample-filled.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5e74144aa4469ccf187f3b932124aa6cf72c0def GIT binary patch literal 25655 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 OD<3a_ib_gR`u_kXf>E0Q literal 0 HcmV?d00001