import BaseService from "@Services/BaseService";
import { Service } from "typedi";
import puppeteer from "puppeteer";
export interface AnchoringProofData {
rootHash: string;
anchoringTime: string;
txLink: string;
office_name: string;
}
@Service()
export default class AnchoringProofService extends BaseService {
constructor() {
super();
}
// private static svgTemplateDocument: string = `
//
// `;
private static svgTemplateDocumentBis: string = `
`;
/**
* @description : Generate a PDF file from a SVG template from anchoring proof data
*/
public async generate(data: AnchoringProofData): Promise {
const browser = await puppeteer.launch({
headless: "new",
executablePath: `/usr/bin/chromium`,
args: ["--no-sandbox", "--disable-setuid-sandbox"],
});
const page = await browser.newPage();
var htmlContent = `
${AnchoringProofService.svgTemplateDocumentBis}
`;
htmlContent = htmlContent
.replace("[[ROOT_HASH]]", data.rootHash)
.replace("[[ANCHORING_TIME]]", data.anchoringTime)
.replace("[[OFFICE_NAME]]", data.office_name)
.replace(/\[\[TX_LINK\]\]/g, data.txLink);
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;
}
}