WeasyPrint is a well-regarded open-source Python library. Install it with pip, render HTML to PDF in a few lines of Python — it supports CSS Paged Media, page breaks, headers, and footers. The output quality is solid, above LibreOffice, though not quite Prince XML-level for complex typography. It's completely free for any use.
ChangeThisFile is a managed file conversion API. One endpoint, one POST, source detected from the filename. No Python environment to manage, no dependency chain to maintain, no server to run. Free tier covers 1,000 conversions/month. Works with curl, Node, Go, PHP — any HTTP client.
Quick verdict
For Python teams that want free, self-hosted HTML→PDF with CSS Paged Media: WeasyPrint. It's a genuine fit — pip install, a few lines of code, good output quality, no licensing cost.
For teams that don't want to manage Python dependencies or a server: ChangeThisFile. No install, no infrastructure, free managed API.
For format needs beyond HTML→PDF: ChangeThisFile. WeasyPrint only converts HTML to PDF; ChangeThisFile covers images, video, audio, archives, ebooks, and more.
For data sovereignty: WeasyPrint (self-hosted). Files never leave your infrastructure.
Pricing comparison
| Plan | ChangeThisFile | WeasyPrint |
|---|---|---|
| Free tier | 1,000 conversions/month (no card) | Free — open-source, no limits |
| Entry paid | $29/mo — 10,000 conversions | Free (your server costs only) |
| High volume | $499/mo — 500K / $1,999/mo — 5M | Free (unlimited, your infrastructure) |
| Total cost | Predictable flat rate | Free in licensing; pay for server time |
| Maintenance | None | Dependency updates, OS Python version, Pango/Cairo |
WeasyPrint is free but has a real cost in ops: managing Python versions, Pango/Cairo rendering dependencies, and system libraries across OS upgrades. On a well-maintained server it's stable; on a shared or changing environment it can require periodic attention.
ChangeThisFile's managed API eliminates that overhead entirely. At low volume, WeasyPrint's $0 licensing beats ChangeThisFile's $29/mo. At high volume with the overhead included, the math depends on your team's time value.
Feature comparison
| Feature | ChangeThisFile | WeasyPrint |
|---|---|---|
| Free managed tier | Yes — 1,000/mo, no card | No managed service (self-hosted library) |
| SDK / library required | No — one HTTP POST | Yes — Python library (pip install weasyprint) |
| HTML→PDF | Yes — LibreOffice engine | Yes — Pango/Cairo rendering |
| CSS Paged Media | No | Yes — partial support (improving) |
| Page headers/footers via CSS | No | Yes (@page rule) |
| Python integration | Via HTTP (requests library) | Native — from weasyprint import HTML |
| Self-hosted | No | Yes — runs anywhere Python runs |
| Image/video/audio/archive conversion | Yes — 690 total routes | No |
| DOCX/ODT→PDF | Yes | No — HTML input only |
Format and route coverage
WeasyPrint is HTML→PDF only. Input must be HTML (or a URL); output is PDF. There is no support for Office documents (DOCX, ODT, XLSX) as direct input — you'd need to convert to HTML first. No image conversion, no video/audio, no archives, no ebooks.
ChangeThisFile covers 690 conversion routes: image (JPG, PNG, WebP, HEIC, AVIF, SVG, BMP, ICO, GIF, TIFF), document (PDF, DOCX, ODT, RTF, HTML, TXT), spreadsheet (XLSX, CSV, JSON, TSV), video (MP4, MKV, WebM, AVI, MOV, GIF), audio (MP3, WAV, FLAC, AAC, M4A), ebooks (EPUB, MOBI, AZW3), archives (ZIP, RAR, 7Z, TAR), and fonts (TTF, OTF, WOFF, WOFF2).
WeasyPrint and ChangeThisFile overlap on HTML→PDF. ChangeThisFile's LibreOffice-based rendering is good for standard documents; WeasyPrint's CSS Paged Media support is stronger for designed layouts.
Privacy and data handling
WeasyPrint (self-hosted): completely local. Your HTML content and output PDFs stay on your machine or server. No data leaves your infrastructure. For HIPAA, GDPR, or legal document workflows, self-hosted WeasyPrint provides the cleanest data handling story.
ChangeThisFile client-side routes (161 routes — images, CSV, JSON, YAML, DOCX→HTML, fonts): files process in your browser. Nothing uploads. Structural privacy guarantee.
ChangeThisFile server-side routes (documents, video, audio, archives): files upload over HTTPS, convert, auto-delete immediately. No retention.
For HTML→PDF specifically, WeasyPrint's local processing is a stronger privacy guarantee than ChangeThisFile's server-side conversion.
Developer experience
ChangeThisFile has no SDK — the endpoint is the SDK. POST a file to /v1/convert, specify a target format, source auto-detected from filename. Works with any HTTP client — no install required.
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-F "file=@report.html" \
-F "target=pdf" \
--output result.pdf
WeasyPrint is a Python library — the integration is native and clean for Python apps:
from weasyprint import HTML
HTML(string='<h1>Report</h1>').write_pdf('report.pdf')
WeasyPrint's integration feels natural in Python projects. It has system dependencies (Pango, Cairo, GLib) that can be tricky in Docker or CI environments — but once set up, it works reliably. ChangeThisFile's HTTP model works in any language with zero system dependencies.
When to choose which
| Use case | Recommended |
|---|---|
| Python app with HTML→PDF, CSS Paged Media | WeasyPrint |
| Self-hosted with data sovereignty | WeasyPrint |
| Zero licensing cost, unlimited volume | WeasyPrint |
| Managed API, no infrastructure | ChangeThisFile |
| Multi-language app (not Python) | ChangeThisFile |
| DOCX/ODT/RTF→PDF conversion | ChangeThisFile |
| Image, video, audio, archive, ebook conversion | ChangeThisFile |
| Free managed tier (1,000/mo no card) | ChangeThisFile |
WeasyPrint is a strong choice for Python developers who want free, self-hosted HTML→PDF with CSS Paged Media support. If your stack is already Python and you're comfortable with system dependencies, it's a clean integration with no recurring cost.
For everything else — or if you don't want to manage a Python environment and its dependencies — ChangeThisFile's free tier covers 1,000 conversions/month across 690 routes with one HTTP endpoint and no install required.