diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index df60730..bc03f2d 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -9,6 +9,7 @@ import path from 'path'; import { PDFDocument } from 'pdf-lib'; import puppeteer from "puppeteer"; import { Runner } from './models/Runner'; +import { RunnerCard } from './models/RunnerCard'; import { RunnerGroup } from './models/RunnerGroup'; /** * This class is responsible for all things pdf creation. @@ -112,6 +113,30 @@ export class PdfCreator { return pdf } + /** + * Generate runner card pdfs. + * @param cards The runner cars you want to generate the cards for. + * @param locale The locale used for the cards (default:en) + */ + public async generateRunnerCards(cards: RunnerCard[], locale: string = "en"): Promise { + if (cards.length > 10) { + let pdf_promises = new Array>(); + let i, j; + for (i = 0, j = cards.length; i < j; i += 10) { + let chunk = cards.slice(i, i + 10); + pdf_promises.push(this.generateRunnerCards(chunk, locale)); + } + const pdfs = await Promise.all(pdf_promises); + return await this.mergePdfs(pdfs); + } + await i18next.changeLanguage(locale); + const template_source = fs.readFileSync(`${this.templateDir}/runner_card.html`, 'utf8'); + const template = Handlebars.compile(template_source); + const result = template({ cards }) + const pdf = await this.renderPdf(result, { format: "A4", landscape: false }); + return pdf + } + /** * Converts all images in html to base64. * Works with image files in the template directory or images from urls.