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

PlanChangeThisFileWeasyPrint
Free tier1,000 conversions/month (no card)Free — open-source, no limits
Entry paid$29/mo — 10,000 conversionsFree (your server costs only)
High volume$499/mo — 500K / $1,999/mo — 5MFree (unlimited, your infrastructure)
Total costPredictable flat rateFree in licensing; pay for server time
MaintenanceNoneDependency 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

FeatureChangeThisFileWeasyPrint
Free managed tierYes — 1,000/mo, no cardNo managed service (self-hosted library)
SDK / library requiredNo — one HTTP POSTYes — Python library (pip install weasyprint)
HTML→PDFYes — LibreOffice engineYes — Pango/Cairo rendering
CSS Paged MediaNoYes — partial support (improving)
Page headers/footers via CSSNoYes (@page rule)
Python integrationVia HTTP (requests library)Native — from weasyprint import HTML
Self-hostedNoYes — runs anywhere Python runs
Image/video/audio/archive conversionYes — 690 total routesNo
DOCX/ODT→PDFYesNo — 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 caseRecommended
Python app with HTML→PDF, CSS Paged MediaWeasyPrint
Self-hosted with data sovereigntyWeasyPrint
Zero licensing cost, unlimited volumeWeasyPrint
Managed API, no infrastructureChangeThisFile
Multi-language app (not Python)ChangeThisFile
DOCX/ODT/RTF→PDF conversionChangeThisFile
Image, video, audio, archive, ebook conversionChangeThisFile
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.