🔍 Free · Private · Client-Side

PDF OCR — Make Scans Searchable

Extract text from scanned PDFs and build a searchable PDF with an invisible text layer. 14 languages. Runs entirely in your browser — nothing is uploaded, not even the language model.

Pages: 0

No PDF loaded

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 summary

File—
Pages—
Language—
Pages OCR'd—
Words recognized—
Avg. confidence—

What is PDF OCR? 🔍

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.

What makes this different from other "free OCR" tools: most of them upload your file to a server. Yours may be a bank statement, a medical record, or a signed contract. This tool never uploads anything — not the PDF, not the images, not even the recognised text. Everything happens on your CPU.

Why you'd make a PDF searchable 🔎

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:

The three kinds of PDF you'll encounter

PDF typeWhat's insideDoes 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.

How to OCR a PDF — step by step 📋

  1. Upload your scanned PDF. Drop it onto the upload box or click to browse. The file stays on your device.
  2. Pick the language. Choose the language that the document text is written in. English documents need "English", even if you're on a Spanish interface.
  3. Adjust rendering DPI. 200 is a good default. Bump it to 300 for small print or dense text.
  4. Enable preprocessing if needed. For faded or tinted scans, turn on Grayscale and Contrast boost.
  5. Click Run OCR. On the first run, the engine downloads (~4 MB) and the language model (~2–15 MB depending on language). This is a one-time cost.
  6. Watch the progress. Each page is rendered, preprocessed, recognized, and mapped — a few seconds per page on a typical laptop.
  7. Review the extracted text. Switch to the "Extracted text" tab to see what was recognised.
  8. Download. Get the searchable PDF, the .txt file, or both.

How the searchable PDF is built 🔬

This is the interesting part, and it's where a lot of OCR tools cut corners. Here's what happens under the hood:

  1. Render — each PDF page is drawn onto an HTML canvas at the chosen DPI using PDF.js.
  2. Preprocess — if enabled, the canvas pixels are converted to grayscale and/or their contrast is stretched.
  3. Recognize — the canvas is passed to Tesseract, which returns a list of words, each with a bounding box {x0, y0, x1, y1} in canvas pixels and a confidence score 0–100.
  4. Rebuild — pdf-lib creates a new PDF. For each page, the original scan is drawn as a background image, then each recognized word is drawn as invisible text (opacity 0) at the position that corresponds to its bounding box.
  5. Scale — the key conversion is 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.
The classic gotcha: PDF points are measured from the bottom-left corner of the page, but canvas coordinates start from the top-left. Every word's y-coordinate has to be flipped: y_pdf = page_height - y_canvas_top - word_height. Miss this and your invisible text appears upside-down.

How accurate is OCR? 📊

Document typeExpected accuracyNotes
Clean 300 DPI scan, printed text95–99%The ideal case — most archival work is done at this level.
Good 200 DPI scan, printed text90–97%Fast and usually accurate enough for search and copy-paste.
Phone photo of a page60–85%Angle, lighting, and focus all hurt. Straighten and crop first if you can.
Faded or yellowed scan70–90%Preprocessing (grayscale + contrast) helps here.
HandwritingVery lowTesseract 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.

What's preserved (and what isn't) ⚠️

✅ What the searchable PDF keeps

⚠️ What changes

Why browser-based OCR matters for privacy 🔒

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.

Who uses PDF OCR? 👥

Common problems and how to fix them 🛠️

"My first run takes ages"

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.

"The extracted text is gibberish"

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.

"Tesseract only returns fragments"

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.

"The searchable PDF won't open in some viewers"

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.

"The invisible text doesn't line up with the visible text"

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.

"Non-Latin scripts (Arabic, Chinese) don't appear in the searchable PDF"

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.

PDF OCR vs PDF to Text vs PDF to Word 🤔

TaskBest toolWhy
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.

Tips for the best results 💡

Is it safe to OCR PDFs here? 🔐

Yes. Here's exactly what happens when you use this tool:

  1. You pick a PDF from your computer.
  2. Your browser reads it into memory locally.
  3. PDF.js renders each page to a canvas — still in memory, still on your device.
  4. Tesseract.js (WebAssembly) processes the canvas on your CPU — no network call.
  5. The recognized text and searchable PDF are built in the browser and downloaded directly.

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.

Frequently Asked Questions

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.

↑