import BaseService from "@Services/BaseService"; import puppeteer from "puppeteer"; import { Service } from "typedi"; 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 { const browser = await puppeteer.launch({ 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 = ` Google ${proofTemplateSvg} `; await page.setContent(htmlContent, { waitUntil: "networkidle0", timeout: 1200000 }); 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 uint8Array = await page.pdf({ landscape: true, printBackground: false, format: "A4", }); const buffer = Buffer.from(uint8Array); await browser.close(); return buffer; } }