Files
kaleidoskop/scripts/pdf.js
T
valknar a8ade90ffb Set up book project: Markdown→CSS→PDF pipeline for KDP
Adds the full authoring and build toolchain for "Das Kaleidoskop der
Schlummerwelten" — all 12 story content files in Markdown, Nunjucks
HTML templates, CSS print layout, and Puppeteer-based PDF generation
targeting Amazon KDP (8.5×8.5 in, 0.125in bleed).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-03 15:38:07 +02:00

52 lines
1.6 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import puppeteer from 'puppeteer';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
import { access } from 'fs/promises';
const __dir = dirname(fileURLToPath(import.meta.url));
async function fileExists(path) {
try { await access(path); return true; } catch { return false; }
}
const root = resolve(__dir, '..');
const inputPath = resolve(root, 'output', 'book.html');
const outputPath = resolve(root, 'output', 'kaleidoskop.pdf');
async function generate() {
try {
await access(inputPath);
} catch {
console.error('output/book.html not found — run `pnpm build` first');
process.exit(1);
}
// On ARM64 (e.g. WSL2 on Apple Silicon / Raspberry Pi), Puppeteer's bundled
// Chrome is x86-64 and won't run. Use the system Chromium instead:
// sudo apt-get install -y chromium
const systemChromium = '/usr/bin/chromium';
const useSystem = await fileExists(systemChromium);
console.log(`Launching Puppeteer (${useSystem ? 'system Chromium' : 'bundled Chrome'})…`);
const browser = await puppeteer.launch({
headless: true,
...(useSystem ? { executablePath: systemChromium } : {}),
});
const page = await browser.newPage();
await page.goto(`file://${inputPath}`, { waitUntil: 'networkidle0' });
// 8.75 × 8.75 inches = trim (8.5×8.5) + 0.125in bleed on each side
await page.pdf({
path: outputPath,
width: '8.75in',
height: '8.75in',
printBackground: true,
margin: { top: 0, bottom: 0, left: 0, right: 0 },
});
await browser.close();
console.log(`PDF written to output/kaleidoskop.pdf`);
}
generate().catch(err => { console.error(err); process.exit(1); });