A scanned PDF is really a stack of images inside a PDF wrapper — you can't search or select text in it. To make it searchable, open Zro7 PDF OCR, drop the file, pick language(s), and Zro7 rasterizes each page with PDF.js and runs Tesseract.js in parallel Web Workers. The output is a fresh PDF with an invisible text layer perfectly aligned under the original images.
How it works
- PDF.js parses the PDF and renders each page to a canvas at 300 DPI.
- Each canvas is handed to a Tesseract.js worker (up to
navigator.hardwareConcurrencyin parallel). - Tesseract returns HOCR with word-level bounding boxes.
- pdf-lib rewrites the PDF, keeping the original image page as-is and overlaying invisible glyphs at each bounding box.
- The result: page one still looks identical, but Cmd/Ctrl-F now works, text is selectable, and screen readers can read it.
Two output modes
- Searchable PDF — the visual PDF is preserved; the invisible text layer makes it searchable. This is what most people want.
- Plain text export — just the text, no layout. Good for feeding into an LLM or a summarizer.
How to get the best accuracy
- Rasterize at 300 DPI or higher — Zro7 defaults to 300; bump to 400 for tiny footnotes.
- Deskew first — enable the auto-deskew toggle for phone-scanned pages.
- Pick the right languages — for a bilingual document, pass both codes (e.g.
eng+fra). Don't add extras 'just in case' — every language slows recognition and costs memory. - Split huge PDFs — 500+ page books OCR faster if split into 50-page chunks and run in tabs, since each tab gets its own memory ceiling.
Common issues
- Photos in the PDF — text embedded in photos comes out garbled. Crop them out first with Extract Pages if needed.
- Already-searchable PDF — Zro7 detects and skips pages that already have a text layer.
- Encrypted PDF — decrypt first with Remove PDF Password.
Steps
- Open PDF OCR.
- Drop the scanned PDF.
- Pick languages, output mode, and DPI.
- Watch the per-page progress bar; download the searchable PDF or .txt when done.
Zro7