Compare · WeasyPrint
A WeasyPrint alternative for HTML to PDF
WeasyPrint is a well-built, genuinely good open-source renderer, and its paged-media support is strong. But it implements its own CSS engine rather than embedding a browser — so support is a subset, and JavaScript isn't executed at all. If your template is charted, scripted, or leans on newer layout features, you find out at render time.
It also isn't dependency-free: it relies on native libraries such as Pango and its stack, which is a recurring source of install friction in slim containers and on Windows.
This renders on current headless Chrome — the same engine your designers preview in — with nothing to install. If your HTML looks right in a browser, it looks right as a PDF.
01Rendral vs WeasyPrint
WeasyPrint pricing at a glance: Free (open source) — you run it and its native dependencies.
| Feature | WeasyPrint | Rendral |
|---|---|---|
| Rendering engine | Own CSS implementation | Headless Chrome |
| JavaScript | Not executed | Executed before capture |
| Native dependencies | Pango and friends | None |
| Modern CSS coverage | A subset | Whatever Chrome supports |
| Who runs it | You | Hosted |
| Screenshots, OG images, merge | Not included | Same key |
02Why teams switch
- Charts and any JS-rendered content work, because the page actually runs.
- No native libraries to install, pin, or debug in a slim image.
- The PDF matches the browser preview, because it is the browser.
- Screenshots, OG images, merge and watermark on the same API key.
Frequently asked
Is WeasyPrint bad?
Not at all — it's a solid project with excellent paged-media support, and if your templates are static HTML and CSS it may be all you need. The tradeoffs are its CSS subset, no JavaScript, and the native dependencies.
My template renders a chart with JavaScript. Will it work?
Not in WeasyPrint, which doesn't execute scripts. Here the page runs before capture, so a chart drawn client-side appears in the output.
How hard is migrating?
Usually a small change: replace the HTML(string=…).write_pdf() call with a POST carrying the same HTML. Page size and margins map to options.
Do I lose control over margins and page size?
No. Format, per-side margins, landscape, headers and footers are all exposed as options.
Related
Statements PDF API
Generate account, billing and bank-style statements as PDFs from HTML.
Compare vs self-hosted Playwright
How self-hosted Playwright and Rendral differ on pricing, features, and setup.
PDFs in AWS Lambda
A step-by-step guide to generating PDFs from AWS Lambda.
A free tier, five endpoints, and SDKs for Node and Python.