By Updated

PDF OCR / Make Searchable

Recognize text in scanned PDFs using Tesseract.js, then extract it as plain text or rebuild a searchable PDF with an invisible text layer. All client-side.

Interactive tool

Tesseract.js loads ~9 MB of WASM on first run.

The first OCR session for a given language is slower because the worker and language pack are downloaded. Subsequent runs reuse the cached worker.

Drop a scanned PDF to OCR

Recognise text in 13 languages. Pages stay in your browser.

What is PDF OCR / Make Searchable?

A two-mode OCR tool for PDFs. In Extract mode, every page is rendered, fed to Tesseract.js, and the recognised text is returned as plain text plus per-page detail. In Searchable PDF mode, the same recognition is performed and the result is baked into a brand-new PDF as an invisible text layer underneath the original page image: the file looks identical, but search and copy now work. All processing happens in your browser via Tesseract.js.

How to OCR a Scanned PDF

  1. 1Drop the scanned PDF into the upload area
  2. 2Pick the recognition language (English, French, Spanish, German, Italian, Portuguese, Dutch, Russian, Japanese, Simplified or Traditional Chinese, Korean, Arabic)
  3. 3Choose Extract text or Searchable PDF
  4. 4Pick a render quality (Standard / High / Maximum): High is the default
  5. 5Click Run OCR and wait while Tesseract processes each page (~3-10s per page)
  6. 6Copy or download the recognised text, or download the searchable PDF
What you get

Key features

13 languages out of the box

English, French, Spanish, German, Italian, Portuguese, Dutch, Russian, Japanese, Chinese (Simplified + Traditional), Korean, Arabic

Two output modes

Extract returns plain text and per-page confidence; Searchable PDF rebuilds a layered file

Per-page progress

A live progress bar shows the current phase (load / render / recognise / embed)

Per-page confidence scores

Tesseract reports a 0-100% confidence per page so you can spot low-quality scans

Lazy worker loading

Tesseract.js (~9 MB) only loads the first time you click Run; subsequent runs reuse the worker

Three render qualities

Standard / High / Maximum: Higher = better OCR accuracy at the cost of speed

Tab-isolated worker

The Tesseract worker is terminated automatically after each run to free memory

100% client-side

Pages, language packs, and recognised text never leave your browser

Why a local PDF OCR?

OCR is one of the most privacy-sensitive operations a tool can perform: the document is, by definition, sensitive enough that it was scanned in the first place (contracts, IDs, medical records, tax forms). Server-side OCR competitors typically upload the entire file and the recognised text. This tool bundles Tesseract.js: the same engine behind countless desktop OCR tools, and runs it in a Web Worker on your device. There is no network call after the language pack is fetched.

Common use cases

  • Making an old scanned report searchable
  • Extracting receipt or invoice text for expense tracking
  • Pulling quotations from photographed academic articles
  • Building a searchable archive from scanned contracts
  • Capturing text from a screenshot saved as PDF
  • Producing accessible documents from image-only PDFs

How the searchable PDF mode works

  • pdfjs-dist renders each page to a canvas at the chosen quality scale
  • Tesseract recognises the text content
  • The page image is embedded into a new PDF (lossless re-render via JPEG)
  • The OCR text is added as an invisible text layer at zero opacity
  • The result is visually identical to the original scan but search/copy/screen-readers now see real text

Limitations

  • Recognition quality depends on the source: clean 300 DPI scans give 95%+ accuracy; smartphone photos or 100 DPI scans are noisier
  • Searchable PDF text positions are approximate (single line per page); selection by visual word is out of scope for this MVP
  • Tesseract handles roughly 100 languages, but only 13 popular ones are exposed in the UI to keep the bundle small
  • Encrypted PDFs are not supported; remove the password first
  • Each language pack is downloaded once and cached in the browser; switching languages re-downloads
Pro tips

Tips & best practices

Use Maximum quality for noisy scans

Re-render at 3x scale before passing to Tesseract; for clean A4 scans, Standard is plenty.

Monitor confidence for QA

Pages below ~70% confidence usually have skew, low DPI, or unusual fonts. Re-scan or rotate them and try again.

Pick the right language

Tesseract is single-language by default. Mixed-language documents work best when you pick the dominant language and accept some recognition errors on the minority.

Use Searchable mode for accessibility

A searchable PDF makes scanned documents readable by screen readers: a real win for accessibility compliance.

Combine with PDF Compress

OCR'd searchable PDFs can be larger than the original. Run them through PDF Compress before sharing.

Built for trust

Privacy & security

Tesseract.js runs in a Web Worker in your browser. The PDF, the recognised text, and the language pack stay on your device. The only network call is the initial language pack download.

Frequently Asked Questions

How accurate is the OCR?

For clean 300 DPI scans, Tesseract typically achieves 95%+ accuracy on Latin scripts. Quality drops with low DPI, page skew, unusual fonts, or photographs taken in bad lighting. The tool reports a per-page confidence score so you can spot pages that need rescanning.

Why is the first run so slow?

Tesseract.js downloads about 9 MB of WASM and a per-language data file on first use. Subsequent runs in the same tab reuse the cached worker. Switching languages re-downloads the relevant data file once.

Does the searchable PDF preserve word positions?

Not yet. The MVP places the entire OCR text in an invisible single-line layer per page. Search and copy work; per-word selection by clicking on a glyph requires Tesseract bounding boxes and is on the roadmap.

What languages are supported?

English, French, Spanish, German, Italian, Portuguese, Dutch, Russian, Japanese, Chinese (Simplified and Traditional), Korean, and Arabic. Other languages can be added on request: Tesseract supports about 100.

Can I OCR a password-protected PDF?

Not directly. Use the PDF Password Remover first (when you have the password) and then run OCR on the unlocked file.

Are my pages uploaded?

No. Tesseract.js and pdfjs-dist run entirely in your browser. The only network call is the initial language pack download.