Why render PDFs in your own tab
Search for “pdf to jpg” and the top of the page is a wall of upload boxes: iLovePDF, Adobe, PDF24 and the rest all want the file on their server before you get a single page. For a payslip, a contract, an ID scan or an internal report that is a real decision, not a formality — and the free tiers add watermarks, page caps or a queue.
This page is the same job without the upload. pdf.js — the renderer behind Firefox’s PDF viewer — runs in your tab, draws each page onto a canvas and hands you PNG or JPEG files. The differences that matter are not the conversion itself but the control around it:
- Pick the pages, not the whole document. A 200-page report where you need two charts should not produce 200 files. Ranges like 1-3,7, open keywords odd / even, and a per-file page count so you can see what will be rendered before you start.
- Resolution you can reason about. 72 DPI is the PDF’s own unit, 150 is a readable screenshot, 300 is print-grade; every rendered image reports its pixel size, and a page that would exceed the browser’s canvas cap is reported with its exact pixel count instead of being dropped quietly.
- Batch without collisions. Drop several PDFs and each one is planned separately: page ranges are applied per file, and when two documents would produce the same file name the second is suffixed — the classic way a ZIP export quietly loses a file.
- Progress you can stop. Rendering runs page by page with a live count, a per-image preview and a cancel button; whatever was already rendered stays available to download. No queue, no account, no “upgrade to continue”.
Nothing is uploaded and there is no share link: the PDF is read with the File API, rendered on a canvas in your tab, and packaged with a local ZIP writer. The renderer itself is fetched on demand, so the page stays light until you actually drop a file. Two honest limits: the output is a raster image, so the text stops being selectable (that is what “to image” means), and extremely large pages at high DPI can exceed what a browser canvas can allocate — in that case you get the exact page and pixel size rather than a mystery failure.