mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 03:13:46 +00:00
refactor: create structure for backend
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
import {PDFFont, PDFPage, rgb, breakTextIntoLines} from "pdf-lib";
|
||||
import {KarakterPdfView} from "./karakter_pdf_view";
|
||||
import {Skill} from "../domain-models/osztaly";
|
||||
|
||||
const maxWidth = 540
|
||||
|
||||
function drawExtendedSkillDescription(skill: Skill, font: PDFFont, baseFontSize: number, page: PDFPage, rows: number) {
|
||||
const indent = 20
|
||||
for (let j = 0; j < (skill.ExtendedDescription?.length || 0); j++) {
|
||||
const paragraph = `${j + 1}. ${skill.ExtendedDescription![j]}`
|
||||
const lines = breakTextIntoLines(paragraph, [' ', '-'], maxWidth - indent, (s) => font.widthOfTextAtSize(s, baseFontSize))
|
||||
page.drawText(paragraph, {
|
||||
x: 30 + indent,
|
||||
y: 700 - rows,
|
||||
size: baseFontSize,
|
||||
font: font,
|
||||
lineHeight: 16,
|
||||
color: rgb(0, 0, 0),
|
||||
maxWidth: maxWidth - indent,
|
||||
wordBreaks: [' ', '-']
|
||||
})
|
||||
rows += lines.length * font.heightAtSize(baseFontSize)
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
|
||||
export function DrawOsztalySpecialsPage(page: PDFPage, font: PDFFont, fontBold: PDFFont, karakter: KarakterPdfView): number {
|
||||
const baseFontSize = 12
|
||||
const titleFontSize = baseFontSize * 3
|
||||
const pageCenterX = page.getWidth()/2
|
||||
const titleWidth = font.widthOfTextAtSize(karakter.Osztaly, titleFontSize)
|
||||
const titleX = pageCenterX - (titleWidth / 2)
|
||||
|
||||
page.drawText(karakter.Osztaly, {
|
||||
x: titleX,
|
||||
y: 770,
|
||||
size: titleFontSize,
|
||||
font: font,
|
||||
color: rgb(0, 0, 0),
|
||||
})
|
||||
let rows = 0
|
||||
for (let i = 0; i < karakter.OsztalySkills.length; i++) {
|
||||
const skill = karakter.OsztalySkills[i];
|
||||
page.drawText(skill.Name, {
|
||||
x: 30,
|
||||
y: 720 - rows,
|
||||
size: baseFontSize,
|
||||
font: fontBold,
|
||||
color: rgb(0, 0, 0),
|
||||
})
|
||||
const lines = breakTextIntoLines(skill.Description, [' ', '-'], maxWidth, (s) => font.widthOfTextAtSize(s, baseFontSize))
|
||||
page.drawText(skill.Description, {
|
||||
x: 30,
|
||||
y: 700 - rows,
|
||||
size: baseFontSize,
|
||||
font: font,
|
||||
lineHeight: 16,
|
||||
color: rgb(0, 0, 0),
|
||||
maxWidth: maxWidth,
|
||||
wordBreaks: [' ', '-']
|
||||
})
|
||||
// rows += Math.ceil(font.widthOfTextAtSize(skill.Description, baseFontSize)/textWidth)*20 + 30
|
||||
// rows += skill.Description.split('\n').length*16 + 30
|
||||
rows += lines.length * font.heightAtSize(baseFontSize)
|
||||
rows = drawExtendedSkillDescription(skill, font, baseFontSize, page, rows);
|
||||
rows += 24 // for title and spacing
|
||||
}
|
||||
return rows
|
||||
}
|
||||
Reference in New Issue
Block a user