#!/usr/bin/env python3
"""Export presentation.html as PDF using Chrome headless and Reveal.js print mode."""
import subprocess
import sys
from pathlib import Path
CHROME_PATHS = [
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
"/Applications/Chromium.app/Contents/MacOS/Chromium",
]
def find_chrome():
for p in CHROME_PATHS:
if Path(p).exists():
return p
return None
def main():
script_dir = Path(__file__).resolve().parent
html_path = script_dir / "presentation.html"
output_path = script_dir / "presentation.pdf"
if not html_path.exists():
print(f"Error: {html_path} not found")
sys.exit(1)
chrome = find_chrome()
if not chrome:
print("Error: Chrome not found. Searched:")
for p in CHROME_PATHS:
print(f" {p}")
sys.exit(1)
# Use ?print-pdf to trigger Reveal.js print layout
file_url = f"file://{html_path}?print-pdf"
print(f"Using: {chrome}")
print(f"Opening: {file_url}")
print("Generating PDF...")
result = subprocess.run(
[
chrome,
"--headless=new",
"--disable-gpu",
"--no-sandbox",
"--disable-extensions",
f"--print-to-pdf={output_path}",
"--print-to-pdf-no-header",
"--no-pdf-header-footer",
"--run-all-compositor-stages-before-draw",
"--virtual-time-budget=10000",
file_url,
],
capture_output=True,
text=True,
timeout=30,
)
if output_path.exists():
size_kb = output_path.stat().st_size / 1024
print(f"PDF saved to: {output_path} ({size_kb:.0f} KB)")
else:
print("Error: PDF was not generated")
if result.stderr:
print(result.stderr)
sys.exit(1)
if __name__ == "__main__":
main()