Alpha Release 0.1.0 - Contract generation #11
@ -52,6 +52,7 @@
|
|||||||
"i18next": "^19.8.7",
|
"i18next": "^19.8.7",
|
||||||
"i18next-fs-backend": "^1.0.8",
|
"i18next-fs-backend": "^1.0.8",
|
||||||
"mime-types": "^2.1.28",
|
"mime-types": "^2.1.28",
|
||||||
|
"pdf-lib": "^1.16.0",
|
||||||
"puppeteer": "^7.0.1",
|
"puppeteer": "^7.0.1",
|
||||||
"reflect-metadata": "^0.1.13",
|
"reflect-metadata": "^0.1.13",
|
||||||
"routing-controllers": "^0.9.0-alpha.6",
|
"routing-controllers": "^0.9.0-alpha.6",
|
||||||
@ -81,4 +82,4 @@
|
|||||||
"publish": false
|
"publish": false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import i18next from "i18next";
|
|||||||
import Backend from 'i18next-fs-backend';
|
import Backend from 'i18next-fs-backend';
|
||||||
import mime from "mime-types";
|
import mime from "mime-types";
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
import { PDFDocument } from 'pdf-lib';
|
||||||
import puppeteer from "puppeteer";
|
import puppeteer from "puppeteer";
|
||||||
import { Runner } from './models/Runner';
|
import { Runner } from './models/Runner';
|
||||||
import { RunnerGroup } from './models/RunnerGroup';
|
import { RunnerGroup } from './models/RunnerGroup';
|
||||||
@ -45,7 +46,7 @@ export class PdfCreator {
|
|||||||
return i18next.t(str, PdfCreator.interpolations).toString();
|
return i18next.t(str, PdfCreator.interpolations).toString();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
this.browser = await puppeteer.launch({ headless: true });
|
this.browser = await puppeteer.launch({ headless: true, args: ['--disable-dev-shm-usage', '--shm-size=10gb'] });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,6 +58,15 @@ export class PdfCreator {
|
|||||||
if (runners.length == 1 && Object.keys(runners[0]).length == 0) {
|
if (runners.length == 1 && Object.keys(runners[0]).length == 0) {
|
||||||
runners[0] = this.generateEmptyRunner();
|
runners[0] = this.generateEmptyRunner();
|
||||||
}
|
}
|
||||||
|
if (runners.length > 100) {
|
||||||
|
let pdfs: Buffer[] = new Array<Buffer>();
|
||||||
|
let i, j;
|
||||||
|
for (i = 0, j = runners.length; i < j; i += 100) {
|
||||||
|
let chunk = runners.slice(i, i + 100);
|
||||||
|
pdfs.push(await this.generateSponsoringContract(chunk, locale));
|
||||||
|
}
|
||||||
|
return await this.mergePdfs(pdfs);
|
||||||
|
}
|
||||||
await i18next.changeLanguage(locale);
|
await i18next.changeLanguage(locale);
|
||||||
const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8');
|
const template_source = fs.readFileSync(`${this.templateDir}/sponsoring_contract.html`, 'utf8');
|
||||||
const template = Handlebars.compile(template_source);
|
const template = Handlebars.compile(template_source);
|
||||||
@ -112,6 +122,25 @@ export class PdfCreator {
|
|||||||
return pdf;
|
return pdf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Merges multiple pdfs into one.
|
||||||
|
* @param pdfs The pdfs you want to merge as an buffer array.
|
||||||
|
* @returns The merged pdf as a buffer.
|
||||||
|
*/
|
||||||
|
private async mergePdfs(pdfs: Buffer[]): Promise<Buffer> {
|
||||||
|
const mergedPdf = await PDFDocument.create();
|
||||||
|
|
||||||
|
for (const pdfBuffer of pdfs) {
|
||||||
|
const pdf = await PDFDocument.load(pdfBuffer);
|
||||||
|
const copiedPages = await mergedPdf.copyPages(pdf, pdf.getPageIndices());
|
||||||
|
copiedPages.forEach((page) => {
|
||||||
|
mergedPdf.addPage(page);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return <Buffer>(await mergedPdf.save());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a new dummy runner with halfspaces for all strings.
|
* Generates a new dummy runner with halfspaces for all strings.
|
||||||
* Can be used to generate empty sponsoring contracts.
|
* Can be used to generate empty sponsoring contracts.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user