diff --git a/karlap.pdf b/karlap.pdf index a07994c..b8b819b 100644 Binary files a/karlap.pdf and b/karlap.pdf differ diff --git a/karlap.ts b/karlap.ts index ba7af91..4f78da6 100644 --- a/karlap.ts +++ b/karlap.ts @@ -4,6 +4,7 @@ import fontKit from "@pdf-lib/fontkit" import {addTextFieldFactory} from "./helpers"; import {renderMainPage} from "./renderMainPage"; import {renderSecondPage} from "./renderSecondPage"; +import {renderFullCasterVarazslatlap, renderHalfCasterVarazslatlap} from "./renderVarazslatlap"; export async function Karlap() { const docBuffer = await fs.readFile("kemkas2karakterlap.pdf", {encoding: null, flag: 'r'}) @@ -23,6 +24,16 @@ export async function Karlap() { const addTextField1 = addTextFieldFactory(form, pdfFont, page1) renderSecondPage(addTextField1); + const page2 = doc.getPage(2) + page2.setFont(pdfFont) + const addTextField2 = addTextFieldFactory(form, pdfFont, page2) + renderFullCasterVarazslatlap(addTextField2); + + const page3 = doc.getPage(3) + page3.setFont(pdfFont) + const addTextField3 = addTextFieldFactory(form, pdfFont, page3) + renderHalfCasterVarazslatlap(addTextField3); + form.updateFieldAppearances(pdfFont) const pdfBytes = await doc.save() diff --git a/kemkas2karakterlap.pdf b/kemkas2karakterlap.pdf index b57beb1..278c265 100644 Binary files a/kemkas2karakterlap.pdf and b/kemkas2karakterlap.pdf differ diff --git a/renderVarazslatlap.ts b/renderVarazslatlap.ts new file mode 100644 index 0000000..3adcf5b --- /dev/null +++ b/renderVarazslatlap.ts @@ -0,0 +1,234 @@ +import {PDFTextField} from "pdf-lib"; +import {TextFieldOptions} from "./helpers"; + +function renderPreparedSpells( + addTextField: (options: TextFieldOptions) => PDFTextField, + prefix: string, + varazslatszint: number, + xOffset: number, + yOffset: number, + max: number, + hasBonusz?: boolean) { + addTextField({ + name: `${prefix}_${varazslatszint}szintu_darab`, + x: 194 + xOffset, + y: 685 + yOffset, + w: 8, + h: 18, + }) + addTextField({ + name: `${prefix}_${varazslatszint}szintu_nf`, + x: 265 + xOffset, + y: 685 + yOffset, + w: 20, + h: 18, + }) + for (let i = 0; i < max - 1; i++) { + addTextField({ + name: `${prefix}_${varazslatszint}szintu_${i}`, + x: 58 + xOffset, + y: 665 + yOffset - (i * 19.85), + w: 233, + h: 18, + }) + } + addTextField({ + name: `${prefix}_${varazslatszint}szintu_${max - 1}`, + x: 65 + xOffset + (hasBonusz === true ? 30 : 0), + y: 665 + yOffset - ((max - 1) * 19.85), + w: 218 - (hasBonusz === true ? 30 : 0), + h: 18, + }) +} + +function renderEgyszeriVarazslat( + addTextField: (options: TextFieldOptions) => PDFTextField, + i: number, + last?: boolean,) { + const offset = 74; + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_nev`, + x: 58, + y: 259 - (i*offset), + w: 210, + h: 18, + }) + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_szint`, + x: 280, + y: 259 - (i*offset), + w: 12, + h: 18, + }) + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_hatoido`, + x: 298.5, + y: 259 - (i*offset), + w: 64, + h: 18, + }) + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_tav`, + x: 364.5, + y: 259 - (i*offset), + w: 23, + h: 18, + }) + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_terulet`, + x: 389.5, + y: 259 - (i*offset), + w: 92, + h: 18, + }) + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_mento`, + x: 484.5, + y: 259 - (i*offset), + w: 53, + h: 18, + }) + const rounded = last === true + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_leiras_0`, + x: 58, + y: 240 - (i*offset), + w: 480, + h: 16, + }) + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_leiras_1`, + x: 58, + y: 240 - (i*offset) - 16, + w: 480, + h: 16, + }) + addTextField({ + name: `varazslatlap_full_egyszeri_${i}_leiras_2`, + x: 58 + (rounded ? 10 : 0), + y: 240 - (i*offset) - 32, + w: 480 - (rounded ? 20 : 0), + h: 16, + }) +} + +function renderEgyszeriVarazslatHalfCaster( + addTextField: (options: TextFieldOptions) => PDFTextField, + i: number, + last?: boolean,) { + const offset = 91; + addTextField({ + name: `varazslatlap_half_egyszeri_${i}_nev`, + x: 58, + y: 401 - (i*offset), + w: 210, + h: 18, + }) + addTextField({ + name: `varazslatlap_half_egyszeri_${i}_szint`, + x: 280, + y: 401 - (i*offset), + w: 12, + h: 18, + }) + addTextField({ + name: `varazslatlap_half_egyszeri_${i}_hatoido`, + x: 298.5, + y: 401 - (i*offset), + w: 64, + h: 18, + }) + addTextField({ + name: `varazslatlap_half_egyszeri_${i}_tav`, + x: 364.5, + y: 401 - (i*offset), + w: 23, + h: 18, + }) + addTextField({ + name: `varazslatlap_half_egyszeri_${i}_terulet`, + x: 389.5, + y: 401 - (i*offset), + w: 92, + h: 18, + }) + addTextField({ + name: `varazslatlap_half_egyszeri_${i}_mento`, + x: 484.5, + y: 401 - (i*offset), + w: 53, + h: 18, + }) + const rounded = last === true + for (let j = 0; j < 3; j++) { + addTextField({ + name: `varazslatlap_half_egyszeri_${i}_leiras_${j}`, + x: 58, + y: 381 - (i*offset) - (16*j), + w: 480, + h: 16, + }) + } + addTextField({ + name: `varazslatlap_half_egyszeri_${i}_leiras_3`, + x: 58 + (rounded ? 10 : 0), + y: 381 - (i*offset) - 48, + w: 480 - (rounded ? 20 : 0), + h: 16, + }) +} + +export function renderFullCasterVarazslatlap(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: 'varazslatlap_full_nev_faj_osztaly', + x: 56, + y: 731, + w: 420, + h: 16, + }) + addTextField({ + name: 'varazslatlap_full_szint', + x: 493, + y: 711, + w: 36, + h: 36, + }) + + renderPreparedSpells(addTextField, 'varazslatlap_full', 0, 0, 0, 7); + renderPreparedSpells(addTextField, 'varazslatlap_full',1, 247, -20, 6, true); + renderPreparedSpells(addTextField, 'varazslatlap_full',2, 0, -170, 5, true); + renderPreparedSpells(addTextField, 'varazslatlap_full',3, 247, -170, 5, true); + renderPreparedSpells(addTextField, 'varazslatlap_full',4, 0, -301, 3 ); + renderPreparedSpells(addTextField, 'varazslatlap_full',5, 247, -301, 3 ); + + renderEgyszeriVarazslat(addTextField,0); + renderEgyszeriVarazslat(addTextField,1); + renderEgyszeriVarazslat(addTextField,2, true); +} + +export function renderHalfCasterVarazslatlap(addTextField: (options: TextFieldOptions) => PDFTextField) { + addTextField({ + name: 'varazslatlap_half_nev_faj_osztaly', + x: 56, + y: 731, + w: 420, + h: 16, + }) + addTextField({ + name: 'varazslatlap_half_szint', + x: 493, + y: 726, + w: 36, + h: 36, + }) + + renderPreparedSpells(addTextField, 'varazslatlap_half',0, 0, -3, 5); + renderPreparedSpells(addTextField, 'varazslatlap_half',1, 247, -3, 5); + renderPreparedSpells(addTextField, 'varazslatlap_half',2, 0, -133, 4); + renderPreparedSpells(addTextField, 'varazslatlap_half',3, 247, -133, 3); + + renderEgyszeriVarazslatHalfCaster(addTextField,0); + renderEgyszeriVarazslatHalfCaster(addTextField,1); + renderEgyszeriVarazslatHalfCaster(addTextField,2); + renderEgyszeriVarazslatHalfCaster(addTextField,3, true); +}