Monorepo for Aesthetic.Computer
aesthetic.computer
1#!/usr/bin/env node
2
3// Generate the SO SOFT proposal PDF from proposal.html using Puppeteer.
4// Usage: node sosoft/generate-pdf.mjs
5
6import puppeteer from "puppeteer";
7import { fileURLToPath } from "url";
8import path from "path";
9
10const __dirname = path.dirname(fileURLToPath(import.meta.url));
11const htmlPath = path.join(__dirname, "proposal.html");
12const outputPath = path.join(__dirname, "proposal.pdf");
13
14const browser = await puppeteer.launch({
15 headless: true,
16 executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || "/usr/sbin/chromium-browser",
17 args: ["--no-sandbox", "--disable-setuid-sandbox"],
18});
19
20const page = await browser.newPage();
21await page.goto(`file://${htmlPath}`, { waitUntil: "networkidle0" });
22
23await page.pdf({
24 path: outputPath,
25 format: "Letter",
26 printBackground: true,
27 margin: { top: "0.65in", bottom: "0.65in", left: "0.75in", right: "0.75in" },
28});
29
30await browser.close();
31console.log(`PDF written to ${outputPath}`);