mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 03:13:46 +00:00
90 lines
3.6 KiB
TypeScript
90 lines
3.6 KiB
TypeScript
import {KarakterPdfView, KepzettsegPdfView} from "./karakter_pdf_view";
|
|
import {PDFDocument, rgb} from "pdf-lib";
|
|
import fontkit from '@pdf-lib/fontkit'
|
|
import {SignedNumberToText} from "../../shared/components/Helpers";
|
|
import download from "downloadjs";
|
|
import {DrawTulajdonsagok} from "./tulajdonsagok.pdf";
|
|
import {DrawMentok} from "./mentok.pdf";
|
|
import {DrawMagic} from "./magic.pdf";
|
|
import {DrawMasodlagosErtekek} from './masodlagos_ertekek.pdf'
|
|
import {DrawOsztalySpecialsPage} from './osztaly_specials.pdf'
|
|
import {DrawFegyverek} from "./fegyverek.pdf";
|
|
|
|
function drawBaseInfo(karakter: KarakterPdfView, draw: (text: string, x : number ,y: number, scale: number) => void) {
|
|
draw(karakter.Name, 60, 710, 1)
|
|
draw(karakter.Nem, 454, 710, 1)
|
|
draw(karakter.Kor.toString(), 454, 690, 1)
|
|
draw(karakter.Isten, 454, 670, 1)
|
|
draw(karakter.Osztaly, 60, 672, 1)
|
|
draw(karakter.Szint, karakter.Szint.length > 1 ? 252 : 264, 682, 3)
|
|
draw(karakter.Faj, 302, 710, 1)
|
|
draw(karakter.Jellem, 302, 672, karakter.Jellem.length > 17 ? 11/12 : 1)
|
|
}
|
|
|
|
function DrawKepzettsegek(draw: (text: string, x: number, y: number) => void, kepzettsegek: KepzettsegPdfView[], startFrom: number) {
|
|
for (let i = 0; i < kepzettsegek.length; i++) {
|
|
let kepzettseg = kepzettsegek[i]
|
|
draw(kepzettseg.KepzettsegName, 60, startFrom - (i * 18))
|
|
const kepzettsegModifier = SignedNumberToText(kepzettseg.KepzettsegModifier)
|
|
draw(kepzettsegModifier, kepzettsegModifier.length > 2 ? 172 : 175, startFrom - (i * 18))
|
|
}
|
|
}
|
|
|
|
function DrawFelszereles(draw: (text: string, x: number, y:number) => void, felszereles: string[]) {
|
|
const startFrom = 337
|
|
for (let i = 0; i < felszereles.length; i++) {
|
|
const item = felszereles[i];
|
|
draw(item, 390, startFrom - (i * 18))
|
|
}
|
|
}
|
|
|
|
export async function CreatePDF(karakter: KarakterPdfView) {
|
|
|
|
const existingPdfBytes = await fetch('/km_karakterlap_hysteria_1.2.pdf').then(res => res.arrayBuffer())
|
|
const pdfDoc = await PDFDocument.load(existingPdfBytes)
|
|
pdfDoc.registerFontkit(fontkit)
|
|
|
|
const fontBytes = await fetch('/Merienda-Regular.ttf').then(res => res.arrayBuffer())
|
|
const pdfFont = await pdfDoc.embedFont(fontBytes)
|
|
const fontSizeBase = 12
|
|
|
|
const page = pdfDoc.getPage(0)
|
|
|
|
function drawText(text: string, x: number, y: number, fontScale = 1, shade = 0) {
|
|
page.drawText(text, {
|
|
x: x,
|
|
y: y,
|
|
size: fontSizeBase * fontScale,
|
|
font: pdfFont,
|
|
color: rgb(shade, shade, shade),
|
|
})
|
|
}
|
|
|
|
drawBaseInfo(karakter, drawText);
|
|
|
|
DrawTulajdonsagok(page, karakter.Tulajdonsagok, fontSizeBase, pdfFont);
|
|
|
|
DrawMasodlagosErtekek(page, karakter, fontSizeBase, pdfFont);
|
|
|
|
DrawMentok(page, karakter, fontSizeBase, pdfFont);
|
|
|
|
DrawKepzettsegek(drawText, karakter.Kepzettsegek, 337);
|
|
const nextKepzettsegFrom = 337 - (karakter.Kepzettsegek.length * 18)
|
|
DrawKepzettsegek(drawText, karakter.TolvajKepzettsegek, nextKepzettsegFrom)
|
|
|
|
DrawFelszereles(drawText, karakter.Felszereles)
|
|
|
|
DrawFegyverek(karakter, pdfFont, fontSizeBase, page)
|
|
|
|
DrawMagic(page, fontSizeBase, pdfFont, karakter.NapiMemorizalhatoVarazslatok, karakter.VarazslatMentokNF)
|
|
|
|
const secondPage = pdfDoc.addPage()
|
|
const fontBoldBytes = await fetch('/Merienda-Bold.ttf').then(res => res.arrayBuffer())
|
|
const fontBold = await pdfDoc.embedFont(fontBoldBytes)
|
|
DrawOsztalySpecialsPage(secondPage, pdfFont, fontBold, karakter)
|
|
|
|
const pdfBytes = await pdfDoc.save();
|
|
download(pdfBytes, karakter.Name + ".pdf", "application/pdf");
|
|
}
|
|
|