2024-09-23 11:43:40 +02:00

81 lines
1.5 KiB
TypeScript

import BaseService from "@Services/BaseService";
import { Service } from "typedi";
import puppeteer from "puppeteer";
import proofTemplate from "./proofTemplate";
export interface AnchoringProofData {
rootHash: string;
anchoringTime: string;
txLink: string;
office_name: string;
}
@Service()
export default class AnchoringProofService extends BaseService {
constructor() {
super();
}
/**
* @description : Generate a PDF file from a SVG template from anchoring proof data
*/
public async generate(data: AnchoringProofData): Promise<Buffer> {
const browser = await puppeteer.launch({
headless: "new",
executablePath: `/usr/bin/chromium`,
args: ["--no-sandbox", "--disable-setuid-sandbox"],
});
const page = await browser.newPage();
const proofTemplateSvg = proofTemplate({
rootHash: data.rootHash,
anchoringTime: data.anchoringTime,
officeName: data.office_name,
txLink: data.txLink,
});
var htmlContent = `
<html>
<body>
${proofTemplateSvg}
</body>
</html>
`;
await page.setContent(htmlContent);
await page.addStyleTag({
content: `
@page {
size: A4 landscape;
margin: 0;
}
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
body {
display: flex;
justify-content: center;
align-items: center;
}
svg {
width: 100%;
height: 100%;
}
`,
});
const buffer = await page.pdf({
landscape: true,
printBackground: false,
format: "A4",
});
await browser.close();
return buffer;
}
}