diff --git a/src/PdfCreator.ts b/src/PdfCreator.ts index 549cf4f..8be61bb 100644 --- a/src/PdfCreator.ts +++ b/src/PdfCreator.ts @@ -10,6 +10,7 @@ import { PDFDocument } from 'pdf-lib'; import puppeteer from "puppeteer"; import { awaitAsyncHandlebarHelpers, helpers } from './asyncHelpers'; import { config } from './config'; +import { CertificateRunner } from './models/CertificateRunner'; import { Runner } from './models/Runner'; import { RunnerCard } from './models/RunnerCard'; import { RunnerGroup } from './models/RunnerGroup'; @@ -153,13 +154,38 @@ export class PdfCreator { await i18next.changeLanguage(locale); const template_source = fs.readFileSync(`${this.templateDir}/runner_card.html`, 'utf8'); const template = Handlebars.compile(template_source); - let result = template({ cards, cards_swapped, eventname: "LfK! 2069", codeformat: "qrcode" }) + let result = template({ cards, cards_swapped, eventname: config.eventname, codeformat: codeformat }) result = await awaitAsyncHandlebarHelpers(result); - fs.writeFileSync("lelelelele.tmp", result); const pdf = await this.renderPdf(result, { format: "A4", landscape: false }); return pdf } + /** + * Generate sponsoring contract pdfs. + * @param runner The runner you want to generate the contracts for. + * @param locale The locale used for the contracts (default:en) + */ + public async generateRunnerCertficates(runners: CertificateRunner[], locale: string = "en"): Promise { + if (runners.length > 50) { + let pdf_promises = new Array>(); + let i, j; + for (i = 0, j = runners.length; i < j; i += 50) { + let chunk = runners.slice(i, i + 50); + pdf_promises.push(this.generateRunnerCertficates(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_certificate.html`, 'utf8'); + const template = Handlebars.compile(template_source); + let result = template({ runners, eventname: config.eventname }); + result = await awaitAsyncHandlebarHelpers(result); + const pdf = await this.renderPdf(result, { format: "A5", landscape: true }); + fs.writeFileSync("lelelelele.tmp", pdf); + return pdf; + } + /** * Converts all images in html to base64. * Works with image files in the template directory or images from urls.