PDF Toolkit

OCR a scanned PDF without sending it to a server

A scan is a picture of text, which means Ctrl+F finds nothing. OCR reads the picture and puts a real text layer underneath it, so the document becomes searchable and copyable while still looking exactly the same. This runs on Tesseract compiled to WebAssembly, in your browser, which is why you can OCR a medical record or a signed contract without wondering where the file ended up.

  • Eleven languages across Latin and Cyrillic scripts, Polish included
  • The visible page is unchanged - the text layer goes underneath
  • Progress reporting, because OCR is the slowest of the four tools
  • Your document stays local; the engine itself is fetched from a CDN

Frequently asked questions

How accurate is browser OCR compared to a paid service?

Measured on our benchmark: a 150 dpi scan with realistic skew and noise came back with every word findable. Tesseract is close to commercial engines on ordinary printed text and degrades faster than they do on heavy skew, handwriting or unusual fonts. If your source is a phone photo of a crumpled page, expect to fix things by hand.

Why is OCR so much slower than the other tools?

Because it is genuinely heavy computation, and it is happening on your CPU rather than on a rack of servers. That is the trade you make for the file never leaving the machine. A dozen pages take a while; a 300-page book is not a realistic job for a browser tab.

Which languages are supported?

English, Polish, German, French, Spanish, Italian, Portuguese, Dutch, Czech, Russian and Ukrainian - Latin and Cyrillic scripts, which is what the font embedded in the text layer covers. Chinese, Japanese and Hindi are not offered because that font has no glyphs for them: the text layer would come out as null bytes rather than searchable words. We checked, rather than assuming.

Does OCR need the internet?

The first run does. The recognition engine and the language data are downloaded on demand from a public CDN rather than shipped with the page, so a cold start needs a connection. Your document is not part of that - it never leaves the browser - but the CDN does see that someone requested a particular language. After one successful run everything is cached locally.

Guides and benchmarks