mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-18 03:13:46 +00:00
70 lines
2.6 KiB
TypeScript
70 lines
2.6 KiB
TypeScript
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
|
|
}
|