pdfmake is a popular JavaScript library for PDF generation. You describe your document in a JavaScript object — define columns, tables, fonts, headers, and content — and pdfmake renders it to a PDF. It runs entirely in the browser (client-side) or in Node.js, with no API calls and no external dependencies beyond the library itself. It's completely free, open-source, and widely used.
ChangeThisFile converts files between formats. You have a DOCX, a JPG, an MP4 — you want a different format. One endpoint, source auto-detected from filename, 690 routes. No JavaScript DSL to learn, no layout engine to wrangle. Just file-in, file-out.
Quick verdict
For programmatically generating PDFs from data in JavaScript: pdfmake. It's free, runs client-side, and gives you full control over the PDF layout programmatically. Excellent for invoice generators, report builders, and any "create PDF from data" flow.
For converting existing files to PDF (DOCX, ODT, XLSX, etc.): ChangeThisFile. pdfmake doesn't convert existing files — it builds PDFs from scratch.
For broader format conversion beyond PDF: ChangeThisFile. pdfmake is PDF-output only. ChangeThisFile handles images, video, audio, archives, ebooks, and more.
For zero cost: pdfmake (free, open-source). ChangeThisFile starts free at 1,000/mo but has paid tiers above that.
Pricing comparison
| Plan | ChangeThisFile | pdfmake |
|---|---|---|
| Free tier | 1,000 conversions/month (no card) | Free — open-source, no limits |
| Entry paid | $29/mo — 10,000 conversions | Free (MIT license, unlimited) |
| High volume | $499/mo — 500K / $1,999/mo — 5M | Free (unlimited, your CPU) |
| Maintenance | None (managed API) | Library updates, font management |
| Runs where | Cloud API (you call it) | Browser + Node.js (you run it) |
pdfmake is free forever at any volume — it runs in your JavaScript environment and uses your CPU. The cost is engineering time: learning the document definition DSL, managing custom fonts, handling complex layouts. For teams already in JavaScript, the investment is worthwhile and the ongoing cost is zero.
ChangeThisFile's free tier gives you 1,000 managed conversions/month — useful for low-volume use cases where pdfmake's layout complexity isn't worth the engineering investment.
Feature comparison
| Feature | ChangeThisFile | pdfmake |
|---|---|---|
| Free managed tier | Yes — 1,000/mo, no card | No managed service — library only |
| SDK / library required | No — one HTTP POST | Yes — npm install pdfmake |
| PDF generation from data/code | No | Yes — core feature, JSON document definition |
| Convert existing DOCX/ODT→PDF | Yes | No — builds PDFs from scratch only |
| Client-side (browser) PDF creation | No (API calls server) | Yes — runs fully in browser |
| Custom fonts in PDF | Limited | Yes — custom TTF/OTF embedding |
| Tables, columns, lists in PDF | Inherited from source doc | Yes — full programmatic control |
| Image/video/audio/archive conversion | Yes — 690 routes | No |
| Languages (non-JS) | Works with any HTTP client | JavaScript/TypeScript only (npm) |
Format and route coverage
pdfmake generates PDFs from JavaScript document definitions. Input is a JavaScript object (columns, tables, images, text styles); output is a PDF file. pdfmake can embed images into PDFs, but it doesn't convert between file formats — it builds PDFs from scratch.
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).
These tools don't compete — pdfmake generates PDFs from code; ChangeThisFile converts existing files. A Node.js app could use both: pdfmake to build dynamic PDF reports, ChangeThisFile to convert user-uploaded DOCX files.
Privacy and data handling
pdfmake runs locally — in the browser or in your Node.js process. No data leaves your application. For generating PDFs from sensitive data (user records, financial reports, medical records), this is a strong privacy advantage — no API call, no external infrastructure involved.
ChangeThisFile client-side routes (161 routes — images, CSV, JSON, YAML, DOCX→HTML, fonts): files process in your browser. Nothing uploads. Same local-processing guarantee as pdfmake for these formats.
ChangeThisFile server-side routes (document/video/audio/archive conversion): files upload over HTTPS, convert, auto-delete. No retention.
For PDF generation from sensitive data, pdfmake's local execution is the most privacy-preserving option. For file format conversion, ChangeThisFile's client-side routes match that guarantee for supported formats.
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 in any language via any HTTP client.
curl -X POST https://changethisfile.com/v1/convert \
-H "Authorization: Bearer ctf_sk_your_key" \
-F "file=@spreadsheet.xlsx" \
-F "target=pdf" \
--output spreadsheet.pdf
pdfmake uses a JavaScript document definition DSL. You define your document structure in a JS object, call pdfMake.createPdf(docDefinition).download() in the browser or write to a file in Node. The learning curve is moderate — the DSL is well-documented, but complex layouts (nested tables, multi-column text flow) require reading the docs carefully.
pdfmake's Node.js integration is straightforward; the browser bundle is large (~2MB gzipped). Custom fonts require pre-converting to base64 and embedding in the vfs_fonts.js virtual filesystem — a one-time setup step that surprises first-time users.
When to choose which
| Use case | Recommended |
|---|---|
| Generate PDFs from data in a JavaScript/Node.js app | pdfmake |
| Client-side PDF generation in the browser | pdfmake |
| Zero-cost, unlimited PDF generation | pdfmake |
| Privacy-first: no API calls for sensitive data | pdfmake |
| Convert existing DOCX/ODT/XLSX/RTF to PDF | ChangeThisFile |
| Image format conversion (HEIC→JPG, PNG→WebP) | ChangeThisFile |
| Video, audio, archive, ebook conversion | ChangeThisFile |
| Non-JavaScript environments (Python, Go, PHP) | ChangeThisFile |
| Free managed API without npm dependency | ChangeThisFile |
pdfmake is genuinely excellent for JavaScript developers who need to generate PDFs programmatically from data. Free, open-source, runs in the browser, and at any volume — if your use case is building PDFs from JavaScript objects, it's the right library.
If your use case is converting existing files — DOCX to PDF, images between formats, video to audio, or any of 690 other routes — ChangeThisFile's free tier handles 1,000 conversions/month with no npm install required. POST a file, get a result, any HTTP client works.