11ty-resume/_config/eleventy-plugin-pdf.js

38 lines
1.3 KiB
JavaScript

import PuppeteerHTMLPDF from "puppeteer-html-pdf";
import { nanoid } from 'nanoid'
import fs from 'fs';
let config = {}
export default function (eleventyConfig, pluginOptions) {
config = pluginOptions;
eleventyConfig.addTransform("toPDF", transformPDF);
};
const transformPDF = async function(content) {
if (this.outputPath && this.outputPath.toLowerCase().endsWith('.pdf')) {
let htmlFile = `./${config.tempDir || "dist"}/${nanoid()}.html`;
let pdfFile = `./${config.tempDir || "dist"}/${nanoid()}.pdf`;
fs.writeFileSync(htmlFile, content);
const htmlPDF = new PuppeteerHTMLPDF();
const options = {
format: config.format || "A4",
margin: config.margin || {
top: "1cm",
right: "1.25cm",
bottom: "1cm",
left: "1.25cm",
},
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');
fs.unlinkSync(htmlFile); fs.unlinkSync(pdfFile);
return Buffer.from(contents,'binary');
} else return content;
};