Compare · jsPDF
A jsPDF alternative for HTML to PDF
jsPDF is a capable client-side library, and for drawing shapes and text programmatically it works well. The trouble starts with the common recipe for converting an existing page: html2canvas screenshots the DOM into a bitmap, and jsPDF embeds that image.
The result is a PDF that is really a picture. Text isn't selectable or searchable, it blurs when zoomed or printed, file sizes balloon, and pagination has to be faked by slicing the canvas. Output also varies by the user's browser, fonts and device pixel ratio — so two customers can generate different files from the same page.
Rendering server-side produces a genuine vector PDF with real text, consistent for everyone, and your API key never ships to the browser.
01Rendral vs jsPDF
jsPDF pricing at a glance: Free (open source) — runs in your users' browsers.
| Feature | jsPDF | Rendral |
|---|---|---|
| Text in the output | Rasterised image | Real, selectable text |
| Print quality | Blurs when zoomed | Vector, sharp at any size |
| File size | Large (embedded bitmaps) | Compact |
| Consistency | Varies by browser and device | Identical for everyone |
| Pagination | Manual canvas slicing | CSS paged media |
| Where it runs | The user's browser | Server-side |
02Why teams switch
- Selectable, searchable text instead of a screenshot of text.
- The same document for every user, regardless of their browser or screen.
- Real page breaks from CSS rather than slicing a canvas by hand.
- No rendering work — or credentials — in the client.
Frequently asked
Why is my html2canvas PDF blurry?
Because it's a bitmap. html2canvas rasterises the DOM at a fixed scale and jsPDF embeds that image, so zooming or printing magnifies pixels. Server-side rendering keeps text as vectors.
Can I keep using jsPDF for simple documents?
Yes. If you're drawing a receipt with a few lines of text programmatically, jsPDF is lightweight and fine. The mismatch is converting an existing styled page.
Is client-side generation faster?
It feels instant because there's no network call, but it burns the user's CPU, blocks the UI on large pages, and produces a much bigger file to download or upload.
How do I send the page to the server?
Post the HTML — often document.documentElement.outerHTML plus inlined styles — to your own endpoint, and have that call the render API so your key stays server-side.
Related
Shipping labels PDF API
Generate 4x6 thermal shipping labels and packing slips as PDFs from HTML.
Compare vs self-hosted Puppeteer
How self-hosted Puppeteer and Rendral differ on pricing, features, and setup.
PDFs in Cloudflare Workers
A step-by-step guide to generating PDFs from Cloudflare Workers.
A free tier, five endpoints, and SDKs for Node and Python.