OCR PDF
Turn a scanned PDF into a selectable, searchable document. 100% in your browser — your file never leaves your device.
Select a scanned PDF
or drop a PDF here — processed locally with Tesseract.js
—
Best on 300 DPI clean print scans (~98% accuracy). Low-DPI scans, faded photocopies, and small fonts will be less accurate. Handwriting is not reliably supported.
Your file is ready
Processed entirely in your browser — the file never left your device.
How to OCR a PDF
Three steps. Nothing uploaded.
Pick a scanned PDF
Open or drop your PDF. It stays in your browser.
Pick language + output
Select the language of the document and whether you want a searchable PDF or just the text.
Run & download
Tesseract.js (WebAssembly) recognises each page in your tab — then you download the result.
What is OCR — and what changes after you run it?
Optical Character Recognition (OCR) turns a picture of text into actual text characters a computer can copy, search, and index. A "scanned" PDF is really just a stack of page images glued into a PDF wrapper; the words you see are pixels, not letters. After OCR, the document either has an invisible text layer placed on top of those pixels (so it looks identical but Ctrl+F works), or you've extracted the text into a plain .txt file you can paste elsewhere. Both modes are offered above.
How OCR works on this page
We use Tesseract.js — the WebAssembly build of Google's open-source Tesseract engine — running inside your browser tab. When you click Run OCR:
- Each page of your PDF is rasterised to a canvas at 300 DPI using PDF.js.
- The canvas pixels are passed to Tesseract.js, which returns recognised text plus per-line bounding boxes.
- For Searchable PDF, we copy your original pages into a fresh PDF and overlay the recognised text with opacity 0 — invisible to the eye but selectable and searchable.
- For Text only, we concatenate the text from every page into a single .txt file.
Nothing in this pipeline calls a server: PDF.js, Tesseract.js, and pdf-lib all run client-side. The only network request related to OCR is the one-time download of the trained language model (about 5–15 MB per language), which your browser then caches for next time.
Honest expectations
- Clean printed text at 300 DPI: usually 95–98% character accuracy. Good enough to search and to copy/paste with minor proofreading.
- Low DPI (under 200) or photographed pages: accuracy drops sharply — Tesseract needs sharp letter edges. Re-scan at higher DPI if you can.
- Multi-column layouts and tables: text comes back row-by-row across columns. We do not re-flow it into logical reading order. For tables consider PDF to Excel instead.
- Handwriting: not reliably supported. Tesseract is trained on printed type; handwritten characters mostly come back as garbled.
- Heavy mixed scripts: if a page is half Arabic and half Latin, pick whichever is dominant. Multi-script OCR is possible but slower and less accurate.
Privacy & security
OCR is a category where in-browser processing is uniquely valuable. Scanned documents are often the most sensitive things people own — passport copies, tax returns, contracts, medical records, lease agreements — and sending them to a third-party server creates an audit trail you cannot delete. Because every byte of the pipeline runs locally, there is no upload to log, no temp file to subpoena, and no retention window to trust. The OCR engine itself is open-source and inspectable.
Frequently asked questions
On a clean 300 DPI scan of a printed document in a supported language, expect roughly 95–98% character accuracy. Lower-resolution scans (under 200 DPI), faded photocopies, skewed pages, and small fonts drop accuracy noticeably. Handwriting is not reliably recognised by Tesseract — for handwritten notes you usually need a different (cloud-only) engine.
No. The recognition engine (Tesseract.js, compiled to WebAssembly) runs entirely inside your browser tab. The PDF you pick is read into memory, each page is rasterised to a canvas, and the canvas pixels are passed straight to Tesseract — no network upload of your document, no server-side step. You can confirm this in your browser's Network tab: only the language model is fetched (once, then cached).
We pre-list the 12 languages used by imisspdf.com itself: English, Spanish, French, German, Portuguese, Italian, Indonesian, Japanese, Korean, Chinese (Simplified), Arabic, and Hindi. Tesseract supports about 100 more — paste any ISO 639-3 code (like "vie" or "tha") into the language box and the matching model will be fetched on demand.
The first time you OCR in a given language, Tesseract downloads its trained model for that language (usually 5–15 MB) and the WebAssembly engine (~30 MB). After that they are cached in your browser, so subsequent runs start within a second or two. Closing the tab does not delete the cache.
Pick Searchable PDF if you want to keep the original document's appearance and just make its text selectable and Ctrl+F-searchable (the OCR text is placed invisibly on top). Pick Text only if you just need the words — for example to paste into a note app or feed into another tool.