import PuppeteerHTMLPDF from "puppeteer-html-pdf"; import { nanoid } from 'nanoid' import fs from 'fs'; let config = {} export default function (eleventyConfig, pluginOptions = {}) { config = Object.assign({ // Plugin defaults tempDir: "dist", // Directory where the temporary files are created debug: false, // Keep the generated temporary html file for debugging format: "A4", // Default pdf format margin: { // PDF file margins top: "1cm", right: "1.25cm", bottom: "1cm", left: "1.25cm", } }, pluginOptions); eleventyConfig.addTransform("toPDF", transformPDF); }; const transformPDF = async function(content) { if (this.outputPath && this.outputPath.toLowerCase().endsWith('.pdf')) { let tempFileName = config.debug ? this.page.fileSlug : nanoid(); let htmlFile = `./${config.tempDir}/${tempFileName}.html`; let pdfFile = `./${config.tempDir}/${tempFileName}.pdf`; fs.writeFileSync(htmlFile, content); const htmlPDF = new PuppeteerHTMLPDF(); const options = { format: config.format, margin: config.margin, path: pdfFile, // you can pass path to save the file }; htmlPDF.setOptions(options); const pdfContent = await htmlPDF.readFile(htmlFile, "utf8"); await htmlPDF.create(pdfContent); let contents = fs.readFileSync(pdfFile, 'binary'); if (!config.debug) { fs.unlinkSync(htmlFile); fs.unlinkSync(pdfFile); } return Buffer.from(contents,'binary'); } else return content; };