TK TaskKit
PDF Tools

PDF to Images

Convert each page of a PDF into a PNG or JPEG, rendered in your browser at the resolution you choose.

Files stay on your device. PDFs are read, merged, and saved entirely inside your browser. We never receive a byte of your file.

What this tool does

This converter renders each page of a PDF as a PNG or JPEG image, rendered in your browser at the resolution you choose. Drop a PDF and you get a grid of thumbnails; pick a format and a scale, then either download all pages at once or save individual ones. The PDF is parsed by pdf.js inside your tab, drawn to off-screen canvases, and only those canvases ever leave a download dialog. There is no upload.

When you'd use it

  • Posting a PDF page on a forum or chat platform that won't accept PDF attachments inline.
  • Generating thumbnails for a portfolio site without spinning up a server-side renderer.
  • Pulling figures out of a paper so you can paste them into slides or another document.
  • Creating an email-friendly preview of a PDF for recipients on slow connections.
  • Producing input for an OCR pipeline that wants raster images, not vector PDF.

How it works

pdf.js loads the document and exposes a getPage(n) method per page. For each page we ask for a viewport at the chosen scale (1×, 1.5×, 2×, 2.5×, or 3×) and draw it into a fresh <canvas> whose width and height match the viewport in pixels. The canvas is then encoded with canvas.toBlob() (image/png or image/jpeg at quality 0.92 for JPEG) and either previewed as a thumbnail or saved as a download.

Changing the format is cheap because the canvas is already rendered — we just re-encode the same pixels into PNG or JPEG and refresh the thumbnails. Changing the scale is more expensive: a different scale needs a different canvas resolution, so the tool re-runs pdf.js's page render at the new viewport. The hard limit of 100 pages is a safety valve for the browser's main thread; beyond that, render time and memory usage grow uncomfortably for a tab.

The pdf.js worker is loaded as a same-origin asset (Vite emits it during build), so no third-party CDN is involved. Once loaded, no further network traffic happens — every page render and image encode is local.

Notes

PNG or JPEG? PNG is lossless, larger, and great for pages with text or sharp graphics. JPEG is smaller and well-suited to image-heavy pages (scans, photographs, maps), but it can introduce visible compression artefacts on text edges. The default is PNG; switch to JPEG when file size matters.

Why does scale 3× look the same on my screen? Your monitor's pixel density caps what you can see at preview time, but the output file is genuinely 3× the resolution. The thumbnail in the grid is downscaled by the browser; the image you download is full size.

Does encrypted PDF work? Standard open-password PDFs typically render through pdf.js. Content-encrypted or DRM PDFs may fail; the panel will show a load error and nothing renders.

Can I render a single specific page only? The grid shows every page; click the small download icon on a single thumbnail to save just that page. There is no separate "only render page X" toggle — at 1× scale, rendering a 50-page PDF is fast enough that the cost isn't meaningful.

Related tools