Drop a scanned PDF into the upload box. Pick the language, then click Run OCR. The first run downloads the OCR engine — after that it's cached and offline.
OCR stands for Optical Character Recognition. It's the process of teaching a computer to read text from an image. When you scan a page or take a photo of a document, the result is a picture — pixels, not letters. A human eye can read those pixels, but a computer just sees a grid of colours. OCR bridges that gap.
A PDF OCR tool does two things: it renders each page as an image, then runs a recognition engine over that image to figure out which pixels form which letters. The result is either plain text you can copy, or a searchable PDF where the recognised text is embedded invisibly behind the original page image.
This tool does both — entirely in your browser, using Tesseract, an open-source OCR engine that's been under development since 1985 and is now maintained by Google and the open-source community. It's the same engine used by many commercial products.
A scanned PDF looks fine — you can read it on screen or print it. But you can't search it, select text from it, or copy a paragraph out of it. The words aren't really there; they're just ink on a page image. Making it searchable unlocks three things:
| PDF type | What's inside | Does it need OCR? |
|---|---|---|
| Text PDF | Real embedded text — selectable, searchable | No. Use PDF to Text to extract directly. |
| Scanned PDF | Page images only — no text layer | Yes. That's what this tool is for. |
| Searchable PDF | Page images + invisible text layer (made by OCR) | No. The text is already extractable. |
This is the interesting part, and it's where a lot of OCR tools cut corners. Here's what happens under the hood:
{x0, y0, x1, y1} in canvas pixels and a confidence score 0–100.PDF_points = canvas_pixels × (page_width_pt / canvas_width_px). The font size for each word is set from the word's bounding box height, so highlights line up with the printed text.y_pdf = page_height - y_canvas_top - word_height. Miss this and your invisible text appears upside-down.
| Document type | Expected accuracy | Notes |
|---|---|---|
| Clean 300 DPI scan, printed text | 95–99% | The ideal case — most archival work is done at this level. |
| Good 200 DPI scan, printed text | 90–97% | Fast and usually accurate enough for search and copy-paste. |
| Phone photo of a page | 60–85% | Angle, lighting, and focus all hurt. Straighten and crop first if you can. |
| Faded or yellowed scan | 70–90% | Preprocessing (grayscale + contrast) helps here. |
| Handwriting | Very low | Tesseract is built for printed text. Handwriting needs a different kind of model. |
| Right-to-left scripts (Arabic, Urdu) | 70–90% | Works but harder than Latin scripts. Good DPI matters. |
The biggest single lever on accuracy is DPI. Rendering at 72 DPI (the PDF default) gives Tesseract barely-legible text — it essentially guesses. 180–220 DPI is the sweet spot for most documents. Go higher (300–400) only if you have small print or thin fonts.
Every other "free OCR online" service uploads your document. For a public poster, that's fine. For a scanned tax return, a medical report, a signed NDA, or a passport, uploading it to a stranger's server is a non-starter. You have no idea how long they keep the file, who has access, or what they do with the recognised text.
This tool works differently. The OCR engine is compiled to WebAssembly and downloaded to your browser — not the other way around. Your file never leaves the tab. Neither does the rendered image, the recognized text, or the searchable PDF you build. Everything is in memory on your device.
The first time you click Run OCR, the browser downloads the Tesseract WebAssembly engine (~4 MB) plus the language model. English is ~2.8 MB; Chinese and Japanese are larger. On a slow connection this can take a minute. After that, everything is cached and runs instantly.
Three usual causes: (1) wrong language selected — if the PDF is in Spanish, using "English" produces nonsense; (2) too-low DPI — bump the rendering scale up; (3) the page is rotated 90° in the scan — Tesseract struggles with sideways text, so rotate the pages first with our Organize PDF tool.
This happens with multipage documents that have poor contrast or heavy backgrounds. Try turning on both Grayscale and Contrast boost. If that fails, re-scan the source at a higher DPI.
Chrome, Adobe Reader, macOS Preview, and Firefox all open pdf-lib output reliably. Very old viewers may not recognise the newer text-object features. Try opening the file in a current browser first.
This can happen if the scan is skewed (a few degrees off horizontal). Tesseract reports word boxes in the skewed coordinate system, so the invisible text sits slightly off. The fix is at the source: straighten the scan before OCR.
pdf-lib's standard fonts only cover Latin. For Arabic, Urdu, Hindi, Chinese, Japanese, and Korean, the recognized text will appear in the extracted .txt but not always in the invisible layer. The text is still in the PDF's internal data — some viewers can still search it — but rendering isn't guaranteed. For those languages, download the .txt file and pair it with the original scan.
| Task | Best tool | Why |
|---|---|---|
| Scanned PDF → searchable PDF | PDF OCR | Adds a text layer to an image-only PDF. |
| Scanned PDF → plain text file | PDF OCR (text output) | Extracts text from scans, with page markers. |
| Text-based PDF → text file | PDF to Text | Faster and cleaner — no OCR needed when text is already there. |
| Text-based PDF → editable Word | PDF to Word | Rebuilds content with paragraph structure. |
| Scanned PDF → editable Word | PDF OCR then Word editor | Extract text first, then paste into Word. Direct PDF-to-Word on scans requires layout OCR which is heavier. |
Yes. Here's exactly what happens when you use this tool:
At no point does the file, the rendered image, or the recognized text leave your device. No data is sent to SkillsInsider's servers. No tracking cookies watch your OCR. You can prove it yourself: run one OCR pass to populate the cache, then turn off Wi-Fi and run another — it still works perfectly.
Yes — completely free. No sign-up, no watermark of our own on the output, no page limits, no per-file fee. The OCR engine downloads to your browser once and caches for future use.
No. Everything runs locally in your browser using PDF.js and Tesseract.js (compiled to WebAssembly). Your file never leaves your device — even the language model runs on your CPU.
It's the original scan with an invisible layer of recognized text placed over each word. The page looks identical, but you can select, copy, and Ctrl+F the text. Adobe calls this "Searchable Image" — the standard format for archived scans.
14 languages: English, Spanish, French, German, Italian, Portuguese, Dutch, Russian, Arabic, Urdu, Hindi, Chinese (Simplified), Japanese, and Korean. Pick the language that matches the document — using the wrong one severely reduces accuracy.
For clean 300-DPI scans of printed text, typically 95–99% word accuracy. Blurry phone photos, very small text, and handwriting give worse results. Rendering at 180–200 DPI is the sweet spot for most documents.
No. Tesseract is built for printed text. Handwriting recognition requires a different kind of model (like a neural network trained on handwriting samples) which this tool doesn't include.
The first time you run OCR, the browser downloads the Tesseract WebAssembly engine (~4 MB) and the language model (~2–15 MB depending on language). This happens once — after that it's cached and runs offline.
After the first OCR run, yes. The engine and language data are cached, so you can go fully offline and still process more scans.