Rendral

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.

FeaturejsPDFRendral
Text in the outputRasterised imageReal, selectable text
Print qualityBlurs when zoomedVector, sharp at any size
File sizeLarge (embedded bitmaps)Compact
ConsistencyVaries by browser and deviceIdentical for everyone
PaginationManual canvas slicingCSS paged media
Where it runsThe user's browserServer-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

Start rendering in minutes.

A free tier, five endpoints, and SDKs for Node and Python.