diff --git a/helpers.ts b/helpers.ts index d9c7310..af39a78 100644 --- a/helpers.ts +++ b/helpers.ts @@ -9,9 +9,9 @@ export interface TextFieldOptions { text?: string, } -export type RenderTextBoxFunc = (options: TextFieldOptions) => PDFTextField; +export type RenderTextFieldFunc = (options: TextFieldOptions) => PDFTextField; -export function addTextFieldFactory(form: PDFForm, pdfFont: PDFFont, page: PDFPage): RenderTextBoxFunc { +export function addTextFieldFactory(form: PDFForm, pdfFont: PDFFont, page: PDFPage): RenderTextFieldFunc { return (options: TextFieldOptions) => { const field = form.createTextField(options.name) field.setText(options.text) diff --git a/karlap.pdf b/karlap.pdf index b8b819b..8ec69db 100644 Binary files a/karlap.pdf and b/karlap.pdf differ diff --git a/karlap.ts b/karlap.ts index 4f78da6..6b9ae4d 100644 --- a/karlap.ts +++ b/karlap.ts @@ -5,6 +5,12 @@ import {addTextFieldFactory} from "./helpers"; import {renderMainPage} from "./renderMainPage"; import {renderSecondPage} from "./renderSecondPage"; import {renderFullCasterVarazslatlap, renderHalfCasterVarazslatlap} from "./renderVarazslatlap"; +import { + renderVarazskonyvFrontPage, + renderVarazskonyvLeftPage, + renderVarazskonyvRightPage, + renderVarazskonyvSecondPage +} from "./renderVarazskonyv"; export async function Karlap() { const docBuffer = await fs.readFile("kemkas2karakterlap.pdf", {encoding: null, flag: 'r'}) @@ -34,6 +40,26 @@ export async function Karlap() { const addTextField3 = addTextFieldFactory(form, pdfFont, page3) renderHalfCasterVarazslatlap(addTextField3); + const page4 = doc.getPage(4) + page4.setFont(pdfFont) + const addTextField4 = addTextFieldFactory(form, pdfFont, page4) + renderVarazskonyvFrontPage(addTextField4); + + const page5 = doc.getPage(5) + page5.setFont(pdfFont) + const addTextField5 = addTextFieldFactory(form, pdfFont, page5) + renderVarazskonyvSecondPage(addTextField5); + + const page6 = doc.getPage(6) + page6.setFont(pdfFont) + const addTextField6 = addTextFieldFactory(form, pdfFont, page6) + renderVarazskonyvRightPage(addTextField6); + + const page7 = doc.getPage(7) + page7.setFont(pdfFont) + const addTextField7 = addTextFieldFactory(form, pdfFont, page7) + renderVarazskonyvLeftPage(addTextField7); + form.updateFieldAppearances(pdfFont) const pdfBytes = await doc.save() diff --git a/renderSecondPage.ts b/renderSecondPage.ts index f775e9a..f309dbb 100644 --- a/renderSecondPage.ts +++ b/renderSecondPage.ts @@ -1,6 +1,6 @@ -import {RenderTextBoxFunc} from "./helpers"; +import {RenderTextFieldFunc} from "./helpers"; -export function renderSecondPage(addTextField: RenderTextBoxFunc): void { +export function renderSecondPage(addTextField: RenderTextFieldFunc): void { // specialis kepessegek for (let i = 0; i < 7; i++) { diff --git a/renderVarazskonyv.ts b/renderVarazskonyv.ts new file mode 100644 index 0000000..9820532 --- /dev/null +++ b/renderVarazskonyv.ts @@ -0,0 +1,247 @@ +import {RenderTextFieldFunc} from "./helpers"; + +interface RenderVarazslatParams { + addTextField: RenderTextFieldFunc, + i: number, + page?: number + yOffset?: number + xOffset?: number + rows?: number, + last?: boolean +} + +function renderVarazslatOnFirstPage({addTextField, i, last}: RenderVarazslatParams) { + const offset = 105; + addTextField({ + name: `varazskonyv_page1_spell${i}_nev`, + x: 58, + y: 668 - (i*offset), + w: 210, + h: 18, + }) + addTextField({ + name: `varazskonyv_page1_spell${i}_szint`, + x: 280, + y: 668 - (i*offset), + w: 12, + h: 18, + }) + addTextField({ + name: `varazskonyv_page1_spell${i}_hatoido`, + x: 298.5, + y: 668 - (i*offset), + w: 64, + h: 18, + }) + addTextField({ + name: `varazskonyv_page1_spell${i}_tav`, + x: 364.5, + y: 668 - (i*offset), + w: 23, + h: 18, + }) + addTextField({ + name: `varazskonyv_page1_spell${i}_terulet`, + x: 389.5, + y: 668 - (i*offset), + w: 92, + h: 18, + }) + addTextField({ + name: `varazskonyv_page1_spell${i}_mento`, + x: 484.5, + y: 668 - (i*offset), + w: 53, + h: 18, + }) + const rounded = last === true + for (let j = 0; j < 4; j++) { + addTextField({ + name: `varazskonyv_page1_spell${i}_leiras_${j}`, + x: 58, + y: 648 - (i*offset) - (16*j), + w: 480, + h: 16, + }) + } + addTextField({ + name: `varazskonyv_page1_spell${i}_leiras_4`, + x: 58 + (rounded ? 10 : 0), + y: 648 - (i*offset) - (4*16), + w: 480 - (rounded ? 20 : 0), + h: 16, + }) +} + +export function renderVarazskonyvFrontPage(addTextField: RenderTextFieldFunc) { + addTextField({ + name: 'varazskonyv_nev_faj_osztaly_szint', + x: 57, + y: 731, + w: 482, + h: 16, + }) + for (let i = 0; i < 5; i++){ + renderVarazslatOnFirstPage({addTextField, i}) + } + renderVarazslatOnFirstPage({addTextField, i: 5, last: true}) +} + +function renderVarazslatOnSecondPage({addTextField, i, yOffset, rows, last}: RenderVarazslatParams) { + yOffset = yOffset || 0 + rows = rows || 4 + addTextField({ + name: `varazskonyv_page2_spell${i}_nev`, + x: 58, + y: 748 - yOffset, + w: 210, + h: 18, + }) + addTextField({ + name: `varazskonyv_page2_spell${i}_szint`, + x: 280, + y: 748 - yOffset, + w: 12, + h: 18, + }) + addTextField({ + name: `varazskonyv_page2_spell${i}_hatoido`, + x: 298.5, + y: 748 - yOffset, + w: 64, + h: 18, + }) + addTextField({ + name: `varazskonyv_page2_spell${i}_tav`, + x: 364.5, + y: 748 - yOffset, + w: 23, + h: 18, + }) + addTextField({ + name: `varazskonyv_page2_spell${i}_terulet`, + x: 389.5, + y: 748 - yOffset, + w: 92, + h: 18, + }) + addTextField({ + name: `varazskonyv_page2_spell${i}_mento`, + x: 484.5, + y: 748 - yOffset, + w: 53, + h: 18, + }) + const rounded = last === true + for (let j = 0; j < rows; j++) { + addTextField({ + name: `varazskonyv_page2_spell${i}_leiras_${j}`, + x: 58, + y: 730 - yOffset - (16*j), + w: 480, + h: 16, + }) + } + addTextField({ + name: `varazskonyv_page2_spell${i}_leiras_${rows}`, + x: 58 + (rounded ? 10 : 0), + y: 730 - yOffset - (rows*16), + w: 480 - (rounded ? 20 : 0), + h: 16, + }) +} + +export function renderVarazskonyvSecondPage(addTextField: RenderTextFieldFunc) { + renderVarazslatOnSecondPage({addTextField, i: 0, yOffset: 0}) + renderVarazslatOnSecondPage({addTextField, i: 1, yOffset: 103}) + renderVarazslatOnSecondPage({addTextField, i: 2, yOffset: 205}) + renderVarazslatOnSecondPage({addTextField, i: 3, yOffset: 310}) + renderVarazslatOnSecondPage({addTextField, i: 4, yOffset: 412}) + renderVarazslatOnSecondPage({addTextField, i: 5, yOffset: 517, rows: 3}) + renderVarazslatOnSecondPage({addTextField, i: 6, yOffset: 608, last: true}) +} + +function renderVarazslatOnBookPage({addTextField, i, page, xOffset, yOffset, rows, last}: RenderVarazslatParams) { + xOffset = xOffset || 0 + yOffset = yOffset || 0 + rows = rows || 4 + addTextField({ + name: `varazskonyv_page${page}_spell${i}_nev`, + x: 58 + xOffset, + y: 748 - yOffset, + w: 210 - 28, + h: 18, + }) + addTextField({ + name: `varazskonyv_page${page}_spell${i}_szint`, + x: 280 + xOffset -28, + y: 748 - yOffset, + w: 12, + h: 18, + }) + addTextField({ + name: `varazskonyv_page${page}_spell${i}_hatoido`, + x: 298.5 + xOffset -28, + y: 748 - yOffset, + w: 64, + h: 18, + }) + addTextField({ + name: `varazskonyv_page${page}_spell${i}_tav`, + x: 364.5 + xOffset -28, + y: 748 - yOffset, + w: 23, + h: 18, + }) + addTextField({ + name: `varazskonyv_page${page}_spell${i}_terulet`, + x: 389.5 + xOffset -28, + y: 748 - yOffset, + w: 92, + h: 18, + }) + addTextField({ + name: `varazskonyv_page${page}_spell${i}_mento`, + x: 484.5 + xOffset -28, + y: 748 - yOffset, + w: 53, + h: 18, + }) + const rounded = last === true + for (let j = 0; j < rows; j++) { + addTextField({ + name: `varazskonyv_page${page}_spell${i}_leiras_${j}`, + x: 58 + xOffset, + y: 730 - yOffset - (16*j), + w: 480 - 28, + h: 16, + }) + } + addTextField({ + name: `varazskonyv_page${page}_spell${i}_leiras_${rows}`, + x: 58 + (rounded ? 10 : 0) + xOffset, + y: 730 - yOffset - (rows*16) + 3, + w: 480 - (rounded ? 20 : 0) - 28, + h: 14, + }) +} + +export function renderVarazskonyvRightPage(addTextField: RenderTextFieldFunc) { + renderVarazslatOnBookPage({addTextField, i: 0, page: 3, xOffset: 29, yOffset: 1}) + renderVarazslatOnBookPage({addTextField, i: 1, page: 3, xOffset: 29, yOffset: 101}) + renderVarazslatOnBookPage({addTextField, i: 2, page: 3, xOffset: 29, yOffset: 200}) + renderVarazslatOnBookPage({addTextField, i: 3, page: 3, xOffset: 29, yOffset: 299}) + renderVarazslatOnBookPage({addTextField, i: 4, page: 3, xOffset: 29, yOffset: 399}) + renderVarazslatOnBookPage({addTextField, i: 5, page: 3, xOffset: 29, yOffset: 498}) + renderVarazslatOnBookPage({addTextField, i: 6, page: 3, xOffset: 29, yOffset: 603, last: true}) +} + +export function renderVarazskonyvLeftPage(addTextField: RenderTextFieldFunc) { + renderVarazslatOnBookPage({addTextField, i: 0, page: 4, yOffset: 2}) + renderVarazslatOnBookPage({addTextField, i: 1, page: 4, yOffset: 101}) + renderVarazslatOnBookPage({addTextField, i: 2, page: 4, yOffset: 201}) + renderVarazslatOnBookPage({addTextField, i: 3, page: 4, yOffset: 300}) + renderVarazslatOnBookPage({addTextField, i: 4, page: 4, yOffset: 399}) + renderVarazslatOnBookPage({addTextField, i: 5, page: 4, yOffset: 498}) + renderVarazslatOnBookPage({addTextField, i: 6, page: 4, yOffset: 603, last: true}) +} \ No newline at end of file diff --git a/renderVarazslatlap.ts b/renderVarazslatlap.ts index 3adcf5b..79238db 100644 --- a/renderVarazslatlap.ts +++ b/renderVarazslatlap.ts @@ -1,14 +1,17 @@ -import {PDFTextField} from "pdf-lib"; -import {TextFieldOptions} from "./helpers"; +import {RenderTextFieldFunc} from "./helpers"; + +interface PreparedSpellsParams { + addTextField: RenderTextFieldFunc; + prefix: string; + varazslatszint: number; + xOffset: number; + yOffset: number; + max: number; + hasBonusz?: boolean; +} function renderPreparedSpells( - addTextField: (options: TextFieldOptions) => PDFTextField, - prefix: string, - varazslatszint: number, - xOffset: number, - yOffset: number, - max: number, - hasBonusz?: boolean) { + {addTextField, prefix, varazslatszint, xOffset, yOffset, max, hasBonusz}: PreparedSpellsParams) { addTextField({ name: `${prefix}_${varazslatszint}szintu_darab`, x: 194 + xOffset, @@ -41,10 +44,13 @@ function renderPreparedSpells( }) } -function renderEgyszeriVarazslat( - addTextField: (options: TextFieldOptions) => PDFTextField, - i: number, - last?: boolean,) { +interface EgyszeriVarazslatFullCaster { + addTextField: RenderTextFieldFunc; + i: number; + last?: boolean; +} + +function renderEgyszeriVarazslat({addTextField, i, last}: EgyszeriVarazslatFullCaster) { const offset = 74; addTextField({ name: `varazslatlap_full_egyszeri_${i}_nev`, @@ -112,10 +118,13 @@ function renderEgyszeriVarazslat( }) } -function renderEgyszeriVarazslatHalfCaster( - addTextField: (options: TextFieldOptions) => PDFTextField, - i: number, - last?: boolean,) { +interface EgyszeriVarazslatHalfCaster { + addTextField: RenderTextFieldFunc; + i: number; + last?: boolean; +} + +function renderEgyszeriVarazslatHalfCaster({addTextField, i, last}: EgyszeriVarazslatHalfCaster,) { const offset = 91; addTextField({ name: `varazslatlap_half_egyszeri_${i}_nev`, @@ -178,7 +187,7 @@ function renderEgyszeriVarazslatHalfCaster( }) } -export function renderFullCasterVarazslatlap(addTextField: (options: TextFieldOptions) => PDFTextField) { +export function renderFullCasterVarazslatlap(addTextField: RenderTextFieldFunc) { addTextField({ name: 'varazslatlap_full_nev_faj_osztaly', x: 56, @@ -194,19 +203,19 @@ export function renderFullCasterVarazslatlap(addTextField: (options: TextFieldOp 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 ); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_full', varazslatszint : 0, xOffset : 0, yOffset : 0, max : 7}); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_full', varazslatszint : 1, xOffset : 247, yOffset : -20, max : 6, hasBonusz : true}); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_full', varazslatszint : 2, xOffset : 0, yOffset : -170, max : 5, hasBonusz : true}); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_full', varazslatszint : 3, xOffset : 247, yOffset : -170, max : 5, hasBonusz : true}); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_full', varazslatszint : 4, xOffset : 0, yOffset : -301, max : 3} ); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_full', varazslatszint : 5, xOffset : 247, yOffset : -301, max : 3} ); - renderEgyszeriVarazslat(addTextField,0); - renderEgyszeriVarazslat(addTextField,1); - renderEgyszeriVarazslat(addTextField,2, true); + renderEgyszeriVarazslat({addTextField : addTextField, i : 0}); + renderEgyszeriVarazslat({addTextField : addTextField, i : 1}); + renderEgyszeriVarazslat({addTextField : addTextField, i : 2, last : true}); } -export function renderHalfCasterVarazslatlap(addTextField: (options: TextFieldOptions) => PDFTextField) { +export function renderHalfCasterVarazslatlap(addTextField: RenderTextFieldFunc) { addTextField({ name: 'varazslatlap_half_nev_faj_osztaly', x: 56, @@ -222,13 +231,13 @@ export function renderHalfCasterVarazslatlap(addTextField: (options: TextFieldOp 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); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_half', varazslatszint : 0, xOffset : 0, yOffset : -3, max : 5}); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_half', varazslatszint : 1, xOffset : 247, yOffset : -3, max : 5}); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_half', varazslatszint : 2, xOffset : 0, yOffset : -133, max : 4}); + renderPreparedSpells({addTextField : addTextField, prefix : 'varazslatlap_half', varazslatszint : 3, xOffset : 247, yOffset : -133, max : 3}); - renderEgyszeriVarazslatHalfCaster(addTextField,0); - renderEgyszeriVarazslatHalfCaster(addTextField,1); - renderEgyszeriVarazslatHalfCaster(addTextField,2); - renderEgyszeriVarazslatHalfCaster(addTextField,3, true); + renderEgyszeriVarazslatHalfCaster({addTextField : addTextField, i : 0}); + renderEgyszeriVarazslatHalfCaster({addTextField : addTextField, i : 1}); + renderEgyszeriVarazslatHalfCaster({addTextField : addTextField, i : 2}); + renderEgyszeriVarazslatHalfCaster({addTextField : addTextField, i : 3, last : true}); }