2026-03-14 14:44:40 -05:00
|
|
|
import puppeteer from "puppeteer";
|
|
|
|
|
|
|
|
|
|
import { env } from "../config/env.js";
|
|
|
|
|
|
|
|
|
|
export async function renderPdf(html: string) {
|
|
|
|
|
const browser = await puppeteer.launch({
|
|
|
|
|
executablePath: env.PUPPETEER_EXECUTABLE_PATH,
|
|
|
|
|
headless: true,
|
|
|
|
|
args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-dev-shm-usage"],
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
const page = await browser.newPage();
|
|
|
|
|
await page.setContent(html, { waitUntil: "networkidle0" });
|
|
|
|
|
|
2026-03-15 00:00:13 -05:00
|
|
|
const pdf = await page.pdf({
|
2026-03-14 14:44:40 -05:00
|
|
|
format: "A4",
|
|
|
|
|
printBackground: true,
|
|
|
|
|
preferCSSPageSize: true,
|
|
|
|
|
});
|
2026-03-15 00:00:13 -05:00
|
|
|
|
|
|
|
|
// Normalize Puppeteer's Uint8Array output to a Node Buffer so Express sends a valid PDF payload.
|
|
|
|
|
return Buffer.from(pdf);
|
2026-03-14 14:44:40 -05:00
|
|
|
} finally {
|
|
|
|
|
await browser.close();
|
|
|
|
|
}
|
|
|
|
|
}
|