From d802fa71c54ee5fab66ac4ad503823e28052111b Mon Sep 17 00:00:00 2001 From: morbalint Date: Wed, 21 Feb 2024 11:36:51 +0100 Subject: [PATCH] refactor --- README.md | 2 +- helpers.ts | 29 +++ karlap.pdf | Bin 211632 -> 211650 bytes karlap.ts | 543 +------------------------------------------ renderMainPage.ts | 550 ++++++++++++++++++++++++++++++++++++++++++++ renderSecondPage.ts | 5 + 6 files changed, 595 insertions(+), 534 deletions(-) create mode 100644 helpers.ts create mode 100644 renderMainPage.ts create mode 100644 renderSecondPage.ts diff --git a/README.md b/README.md index f48f94a..f18010f 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,4 @@ A projekt célja, a Kard és Mágia második kiadásához kitölthető PDF karak 1. `yarn install` 2. `tsc -w` -3. `node dist/index.js` +3. `node --watch dist/index.js` diff --git a/helpers.ts b/helpers.ts new file mode 100644 index 0000000..d9c7310 --- /dev/null +++ b/helpers.ts @@ -0,0 +1,29 @@ +import {PDFFont, PDFForm, PDFPage, PDFTextField, rgb} from "pdf-lib"; + +export interface TextFieldOptions { + name: string, + x: number, + y: number, + w: number, + h: number, + text?: string, +} + +export type RenderTextBoxFunc = (options: TextFieldOptions) => PDFTextField; + +export function addTextFieldFactory(form: PDFForm, pdfFont: PDFFont, page: PDFPage): RenderTextBoxFunc { + return (options: TextFieldOptions) => { + const field = form.createTextField(options.name) + field.setText(options.text) + field.addToPage(page, { + x: options.x, + y: options.y, + font: pdfFont, + borderColor: rgb(1, 1, 1), + borderWidth: 0, + width: options.w, + height: options.h, + }) + return field + } +} \ No newline at end of file diff --git a/karlap.pdf b/karlap.pdf index 6dffda15acd0fe5503fd4dc5d6d54472970a2062..4dd69a038dd61a402e6f47e8aa00a3d34afe4d02 100644 GIT binary patch delta 6188 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 W9uvCMbUAz~5=jX%F!+(S>VE*>!wY5r delta 6160 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 I6*ZOq4{38U0ssI2 diff --git a/karlap.ts b/karlap.ts index 081606c..ba7af91 100644 --- a/karlap.ts +++ b/karlap.ts @@ -1,7 +1,9 @@ -import {PDFDocument, PDFPage, rgb} from "pdf-lib"; +import {PDFDocument} from "pdf-lib"; import fs from "fs/promises"; import fontKit from "@pdf-lib/fontkit" - +import {addTextFieldFactory} from "./helpers"; +import {renderMainPage} from "./renderMainPage"; +import {renderSecondPage} from "./renderSecondPage"; export async function Karlap() { const docBuffer = await fs.readFile("kemkas2karakterlap.pdf", {encoding: null, flag: 'r'}) @@ -13,538 +15,13 @@ export async function Karlap() { const page0 = doc.getPage(0) page0.setFont(pdfFont) + const addTextField0 = addTextFieldFactory(form, pdfFont, page0) + renderMainPage(addTextField0); - const addTextFieldToPage = (page: PDFPage) => (options: {name: string, x: number, y: number, w: number, h: number, text?: string}) => { - const field = form.createTextField(options.name) - field.setText(options.text) - field.addToPage(page, { - x: options.x, - y: options.y, - font: pdfFont, - borderColor: rgb(1,1,1), - borderWidth: 0, - width: options.w, - height: options.h, - }) - return field - } - - const addTextField0 = addTextFieldToPage(page0) - - addTextField0({ - name: "nev_faj_osztaly", - x: 55, - y: 730, - w: 420, - h: 24 - }) - addTextField0({ - name: "szint", - x: 495, - y: 711, - w: 36, - h: 36 - }) - - addTextField0({ - name: "vo", - x: 210, - y: 690, - w: 28, - h: 28 - }) - addTextField0({ - name: "pancel", - x: 303, - y: 705, - w: 24, - h: 16 - }) - addTextField0({ - name: "pajzs", - x: 369, - y: 705, - w: 24, - h: 16 - }) - addTextField0({ - name: "egyeb_vo", - x: 436, - y: 705, - w: 24, - h: 16 - }) - - // Tulajdonsagok - addTextField0({ - name: "tul_ero", - x: 130, - y: 688, - w: 24, - h: 16 - }) - addTextField0({ - name: "tul_ero_mod", - x: 169, - y: 688, - w: 14, - h: 16 - }) - addTextField0({ - name: "tul_ugy", - x: 130, - y: 660, - w: 24, - h: 16 - }) - addTextField0({ - name: "tul_ugy_mod", - x: 169, - y: 660, - w: 14, - h: 16 - }) - addTextField0({ - name: "tul_egs", - x: 130, - y: 631, - w: 24, - h: 16 - }) - addTextField0({ - name: "tul_egs_mod", - x: 169, - y: 631, - w: 14, - h: 16 - }) - addTextField0({ - name: "tul_int", - x: 130, - y: 603, - w: 24, - h: 16 - }) - addTextField0({ - name: "tul_int_mod", - x: 169, - y: 603, - w: 14, - h: 16 - }) - addTextField0({ - name: "tul_bol", - x: 130, - y: 575, - w: 24, - h: 16 - }) - addTextField0({ - name: "tul_bol_mod", - x: 169, - y: 575, - w: 14, - h: 16 - }) - addTextField0({ - name: "tul_kar", - x: 130, - y: 546, - w: 24, - h: 16 - }) - addTextField0({ - name: "tul_kar_mod", - x: 169, - y: 546, - w: 14, - h: 16 - }) - - addTextField0({ - name: "jellem", - x: 385, - y: 680, - w: 113, - h: 16 - }) - addTextField0({ - name: "istenseg", - x: 385, - y: 651, - w: 150, - h: 16 - }) - - // HP - addTextField0({ - name: "hp_rolls", - x: 199, - y: 640, - w: 175, - h: 16 - }) - addTextField0({ - name: "hp_aktualis", - x: 202, - y: 600, - w: 170, - h: 16 - }) - addTextField0({ - name: "hp_aktualis_2", - x: 202, - y: 584, - w: 170, - h: 16 - }) - addTextField0({ - name: "hp_aktualis_3", - x: 202, - y: 568, - w: 170, - h: 16 - }) - addTextField0({ - name: "hp_aktualis_4", - x: 202, - y: 554, - w: 170, - h: 14 - }) - - // Mentők - addTextField0({ - name: "kitartas_alap", - x: 445, - y: 617, - w: 24, - h: 16 - }) - addTextField0({ - name: "kitartas_mod", - x: 479, - y: 617, - w: 24, - h: 16 - }) - addTextField0({ - name: "kitartas_sum", - x: 518, - y: 618, - w: 14, - h: 14 - }) - addTextField0({ - name: "reflex_alap", - x: 445, - y: 589, - w: 24, - h: 16 - }) - addTextField0({ - name: "reflex_mod", - x: 479, - y: 589, - w: 24, - h: 16 - }) - addTextField0({ - name: "reflex_sum", - x: 518, - y: 590, - w: 14, - h: 14 - }) - addTextField0({ - name: "akaratero_alap", - x: 445, - y: 560, - w: 24, - h: 16 - }) - addTextField0({ - name: "akaratero_mod", - x: 479, - y: 560, - w: 24, - h: 16 - }) - addTextField0({ - name: "akaratero_sum", - x: 518, - y: 561, - w: 14, - h: 14 - }) - - addTextField0({ - name: "kezdemenyezes", - x: 518, - y: 536, - w: 14, - h: 14 - }) - - addTextField0({ - name: "tamadas_bonusz_alap", - x: 141, - y: 503, - w: 38, - h: 16 - }) - addTextField0({ - name: "tamadas_bonusz_ero", - x: 110, - y: 475, - w: 24, - h: 16 - }) - addTextField0({ - name: "tamadas_bonusz_kozelharc", - x: 145, - y: 476, - w: 31, - h: 14 - }) - addTextField0({ - name: "tamadas_bonusz_ugy", - x: 110, - y: 447, - w: 24, - h: 16 - }) - addTextField0({ - name: "tamadas_bonusz_tavolsagi", - x: 145, - y: 448, - w: 31, - h: 14 - }) - - addTextField0({ - name: "fegyver_1", - x: 187, - y: 503, - w: 248, - h: 16 - }) - addTextField0({ - name: "fegyver_2", - x: 187, - y: 475, - w: 248, - h: 16 - }) - addTextField0({ - name: "fegyver_3", - x: 187, - y: 447, - w: 248, - h: 16 - }) - addTextField0({ - name: "fegyver_4", - x: 187, - y: 419, - w: 248, - h: 16 - }) - - addTextField0({ - name: "tapasztalat", - x: 442, - y: 500, - w: 95, - h: 16 - }) - addTextField0({ - name: "tapasztalat_2", - x: 442, - y: 484, - w: 95, - h: 16 - }) - addTextField0({ - name: "tapasztalat_3", - x: 442, - y: 468, - w: 95, - h: 16 - }) - addTextField0({ - name: "tapasztalat_4", - x: 442, - y: 452, - w: 95, - h: 16 - }) - addTextField0({ - name: "tapasztalat_kovetkezo_szint", - x: 447, - y: 418, - w: 85, - h: 16 - }) - - // kepzettseg elso oszlop - for (let i = 0; i < 6; i++) { - addTextField0({ - name: `kepzettseg_${i}_nev`, - x: 57, - y: 390 - (i * 28.25), - w: 100, - h: 16 - }) - addTextField0({ - name: `kepzettseg_${i}_alap`, - x: 161, - y: 390 - (i * 28.25), - w: 24, - h: 16 - }) - addTextField0({ - name: `kepzettseg_${i}_bonusz`, - x: 195, - y: 390 - (i * 28.25), - w: 24, - h: 16 - }) - addTextField0({ - name: `kepzettseg_${i}_osszes`, - x: 234, - y: 391 - (i * 28.25), - w: 14, - h: 14 - }) - } - // kepzettseg masodik oszlop - for (let i = 0; i < 6; i++) { - addTextField0({ - name: `kepzettseg_${(i + 6)}_nev`, - x: 57+213, - y: 390 - (i * 28.25), - w: 100, - h: 16 - }) - addTextField0({ - name: `kepzettseg_${(i + 6)}_alap`, - x: 161+213, - y: 390 - (i * 28.25), - w: 24, - h: 16 - }) - addTextField0({ - name: `kepzettseg_${(i + 6)}_bonusz`, - x: 195+213, - y: 390 - (i * 28.25), - w: 24, - h: 16 - }) - addTextField0({ - name: `kepzettseg_${(i + 6)}_osszes`, - x: 234+213, - y: 391 - (i * 28.25), - w: 14, - h: 14 - }) - } - - addTextField0({ - name: `arany`, - x: 475, - y: 387, - w: 63, - h: 14 - }) - addTextField0({ - name: `arany_2`, - x: 475, - y: 373, - w: 63, - h: 14 - }) - addTextField0({ - name: `arany_3`, - x: 475, - y: 361, - w: 63, - h: 12 - }) - addTextField0({ - name: `elektrum`, - x: 475, - y: 387-56, - w: 63, - h: 14 - }) - addTextField0({ - name: `elektrum_2`, - x: 475, - y: 373-56, - w: 63, - h: 14 - }) - addTextField0({ - name: `elektrum_3`, - x: 475, - y: 361-56, - w: 63, - h: 12 - }) - addTextField0({ - name: `ezust`, - x: 475, - y: 387-56-57, - w: 63, - h: 14 - }) - addTextField0({ - name: `ezust_2`, - x: 475, - y: 373-56-57, - w: 63, - h: 14 - }) - addTextField0({ - name: `ezust_3`, - x: 475, - y: 361-56-57, - w: 63, - h: 12 - }) - - // viselt - for (let i = 0; i < 8; i++) { - addTextField0({ - name: `viselt_${(i)}`, - x: 62, - y: 197 - (i * 19.75), - w: 143, - h: 16 - }) - } - // cipelt - for (let i = 0; i < 8; i++) { - addTextField0({ - name: `cipelt_${(i)}`, - x: 227, - y: 197 - (i * 19.75), - w: 143, - h: 16 - }) - } - // aprosagok - for (let i = 0; i < 8; i++) { - addTextField0({ - name: `aprosagok_${(i)}`, - x: 391, - y: 197 - (i * 19.75), - w: 143, - h: 16 - }) - } - + const page1 = doc.getPage(1) + page1.setFont(pdfFont) + const addTextField1 = addTextFieldFactory(form, pdfFont, page1) + renderSecondPage(addTextField1); form.updateFieldAppearances(pdfFont) const pdfBytes = await doc.save() diff --git a/renderMainPage.ts b/renderMainPage.ts new file mode 100644 index 0000000..70f5588 --- /dev/null +++ b/renderMainPage.ts @@ -0,0 +1,550 @@ +import {PDFTextField} from "pdf-lib"; +import {TextFieldOptions} from "./helpers"; + +function renderTulajdonsagok(addTextField: (options: TextFieldOptions) => PDFTextField) { + // Tulajdonsagok + addTextField({ + name: "tul_ero", + x: 130, + y: 688, + w: 24, + h: 16 + }) + addTextField({ + name: "tul_ero_mod", + x: 169, + y: 688, + w: 14, + h: 16 + }) + addTextField({ + name: "tul_ugy", + x: 130, + y: 660, + w: 24, + h: 16 + }) + addTextField({ + name: "tul_ugy_mod", + x: 169, + y: 660, + w: 14, + h: 16 + }) + addTextField({ + name: "tul_egs", + x: 130, + y: 631, + w: 24, + h: 16 + }) + addTextField({ + name: "tul_egs_mod", + x: 169, + y: 631, + w: 14, + h: 16 + }) + addTextField({ + name: "tul_int", + x: 130, + y: 603, + w: 24, + h: 16 + }) + addTextField({ + name: "tul_int_mod", + x: 169, + y: 603, + w: 14, + h: 16 + }) + addTextField({ + name: "tul_bol", + x: 130, + y: 575, + w: 24, + h: 16 + }) + addTextField({ + name: "tul_bol_mod", + x: 169, + y: 575, + w: 14, + h: 16 + }) + addTextField({ + name: "tul_kar", + x: 130, + y: 546, + w: 24, + h: 16 + }) + addTextField({ + name: "tul_kar_mod", + x: 169, + y: 546, + w: 14, + h: 16 + }) +} + +function renderVO(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: "vo", + x: 210, + y: 690, + w: 28, + h: 28 + }) + addTextField({ + name: "pancel", + x: 303, + y: 705, + w: 24, + h: 16 + }) + addTextField({ + name: "pajzs", + x: 369, + y: 705, + w: 24, + h: 16 + }) + addTextField({ + name: "egyeb_vo", + x: 436, + y: 705, + w: 24, + h: 16 + }) +} + +function renderBaseInfo(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: "nev_faj_osztaly", + x: 55, + y: 730, + w: 420, + h: 24 + }) + addTextField({ + name: "szint", + x: 495, + y: 711, + w: 36, + h: 36 + }) + addTextField({ + name: "jellem", + x: 385, + y: 680, + w: 113, + h: 16 + }) + addTextField({ + name: "istenseg", + x: 385, + y: 651, + w: 150, + h: 16 + }) +} + +function renderHP(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: "hp_rolls", + x: 199, + y: 640, + w: 175, + h: 16 + }) + addTextField({ + name: "hp_aktualis", + x: 202, + y: 600, + w: 170, + h: 16 + }) + addTextField({ + name: "hp_aktualis_2", + x: 202, + y: 584, + w: 170, + h: 16 + }) + addTextField({ + name: "hp_aktualis_3", + x: 202, + y: 568, + w: 170, + h: 16 + }) + addTextField({ + name: "hp_aktualis_4", + x: 202, + y: 554, + w: 170, + h: 14 + }) +} + +function renderMentok(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: "kitartas_alap", + x: 445, + y: 617, + w: 24, + h: 16 + }) + addTextField({ + name: "kitartas_mod", + x: 479, + y: 617, + w: 24, + h: 16 + }) + addTextField({ + name: "kitartas_sum", + x: 518, + y: 618, + w: 14, + h: 14 + }) + addTextField({ + name: "reflex_alap", + x: 445, + y: 589, + w: 24, + h: 16 + }) + addTextField({ + name: "reflex_mod", + x: 479, + y: 589, + w: 24, + h: 16 + }) + addTextField({ + name: "reflex_sum", + x: 518, + y: 590, + w: 14, + h: 14 + }) + addTextField({ + name: "akaratero_alap", + x: 445, + y: 560, + w: 24, + h: 16 + }) + addTextField({ + name: "akaratero_mod", + x: 479, + y: 560, + w: 24, + h: 16 + }) + addTextField({ + name: "akaratero_sum", + x: 518, + y: 561, + w: 14, + h: 14 + }) +} + +function renderTamadasBonusz(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: "tamadas_bonusz_alap", + x: 141, + y: 503, + w: 38, + h: 16 + }) + addTextField({ + name: "tamadas_bonusz_ero", + x: 110, + y: 475, + w: 24, + h: 16 + }) + addTextField({ + name: "tamadas_bonusz_kozelharc", + x: 145, + y: 476, + w: 31, + h: 14 + }) + addTextField({ + name: "tamadas_bonusz_ugy", + x: 110, + y: 447, + w: 24, + h: 16 + }) + addTextField({ + name: "tamadas_bonusz_tavolsagi", + x: 145, + y: 448, + w: 31, + h: 14 + }) +} + +function renderFegyverek(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: "fegyver_1", + x: 187, + y: 503, + w: 248, + h: 16 + }) + addTextField({ + name: "fegyver_2", + x: 187, + y: 475, + w: 248, + h: 16 + }) + addTextField({ + name: "fegyver_3", + x: 187, + y: 447, + w: 248, + h: 16 + }) + addTextField({ + name: "fegyver_4", + x: 187, + y: 419, + w: 248, + h: 16 + }) +} + +function renderTapasztalat(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: "tapasztalat", + x: 442, + y: 500, + w: 95, + h: 16 + }) + addTextField({ + name: "tapasztalat_2", + x: 442, + y: 484, + w: 95, + h: 16 + }) + addTextField({ + name: "tapasztalat_3", + x: 442, + y: 468, + w: 95, + h: 16 + }) + addTextField({ + name: "tapasztalat_4", + x: 442, + y: 452, + w: 95, + h: 16 + }) + addTextField({ + name: "tapasztalat_kovetkezo_szint", + x: 447, + y: 418, + w: 85, + h: 16 + }) +} + +function renderKepzettsegek(addTextField: (options: TextFieldOptions) => PDFTextField) { + // elso oszlop + for (let i = 0; i < 6; i++) { + addTextField({ + name: `kepzettseg_${i}_nev`, + x: 57, + y: 390 - (i * 28.25), + w: 100, + h: 16 + }) + addTextField({ + name: `kepzettseg_${i}_alap`, + x: 161, + y: 390 - (i * 28.25), + w: 24, + h: 16 + }) + addTextField({ + name: `kepzettseg_${i}_bonusz`, + x: 195, + y: 390 - (i * 28.25), + w: 24, + h: 16 + }) + addTextField({ + name: `kepzettseg_${i}_osszes`, + x: 234, + y: 391 - (i * 28.25), + w: 14, + h: 14 + }) + } + // masodik oszlop + for (let i = 0; i < 6; i++) { + addTextField({ + name: `kepzettseg_${(i + 6)}_nev`, + x: 57 + 213, + y: 390 - (i * 28.25), + w: 100, + h: 16 + }) + addTextField({ + name: `kepzettseg_${(i + 6)}_alap`, + x: 161 + 213, + y: 390 - (i * 28.25), + w: 24, + h: 16 + }) + addTextField({ + name: `kepzettseg_${(i + 6)}_bonusz`, + x: 195 + 213, + y: 390 - (i * 28.25), + w: 24, + h: 16 + }) + addTextField({ + name: `kepzettseg_${(i + 6)}_osszes`, + x: 234 + 213, + y: 391 - (i * 28.25), + w: 14, + h: 14 + }) + } +} + +function renderPenz(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: `arany`, + x: 475, + y: 387, + w: 63, + h: 14 + }) + addTextField({ + name: `arany_2`, + x: 475, + y: 373, + w: 63, + h: 14 + }) + addTextField({ + name: `arany_3`, + x: 475, + y: 361, + w: 63, + h: 12 + }) + addTextField({ + name: `elektrum`, + x: 475, + y: 387 - 56, + w: 63, + h: 14 + }) + addTextField({ + name: `elektrum_2`, + x: 475, + y: 373 - 56, + w: 63, + h: 14 + }) + addTextField({ + name: `elektrum_3`, + x: 475, + y: 361 - 56, + w: 63, + h: 12 + }) + addTextField({ + name: `ezust`, + x: 475, + y: 387 - 56 - 57, + w: 63, + h: 14 + }) + addTextField({ + name: `ezust_2`, + x: 475, + y: 373 - 56 - 57, + w: 63, + h: 14 + }) + addTextField({ + name: `ezust_3`, + x: 475, + y: 361 - 56 - 57, + w: 63, + h: 12 + }) +} + +function renderFelszereles(addTextField: (options: TextFieldOptions) => PDFTextField) { + // viselt + for (let i = 0; i < 8; i++) { + addTextField({ + name: `viselt_${(i)}`, + x: 62, + y: 197 - (i * 19.75), + w: 143, + h: 16 + }) + } + // cipelt + for (let i = 0; i < 8; i++) { + addTextField({ + name: `cipelt_${(i)}`, + x: 227, + y: 197 - (i * 19.75), + w: 143, + h: 16 + }) + } + // aprosagok + for (let i = 0; i < 8; i++) { + addTextField({ + name: `aprosagok_${(i)}`, + x: 391, + y: 197 - (i * 19.75), + w: 143, + h: 16 + }) + } +} + +export function renderMainPage(addTextField: (options: TextFieldOptions) => PDFTextField) { + renderBaseInfo(addTextField); + renderVO(addTextField); + renderTulajdonsagok(addTextField); + renderHP(addTextField); + renderMentok(addTextField); + + addTextField({ + name: "kezdemenyezes", + x: 518, + y: 536, + w: 14, + h: 14 + }) + + renderTamadasBonusz(addTextField); + renderFegyverek(addTextField); + renderTapasztalat(addTextField); + renderKepzettsegek(addTextField); + renderPenz(addTextField); + renderFelszereles(addTextField); +} \ No newline at end of file diff --git a/renderSecondPage.ts b/renderSecondPage.ts new file mode 100644 index 0000000..fd91864 --- /dev/null +++ b/renderSecondPage.ts @@ -0,0 +1,5 @@ +import {RenderTextBoxFunc} from "./helpers"; + +export function renderSecondPage(addTextField: RenderTextBoxFunc): void { + +} \ No newline at end of file