OCR a PDF or image

Pull text out of scanned PDFs and images using Tesseract.js, the standard open-source OCR engine, running locally.

Drop your file here

or click to browse

All files or paste with ⌘V

How it works

Pull text out of scanned PDFs and images using Tesseract.js, the standard open-source OCR engine, running locally.

Drop a PDF or an image (PNG, JPG, WebP). Pick a language: English, Spanish, French, German, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Korean, Arabic, or Hindi. The first time you use a language, Tesseract downloads its trained data (~10 MB per language) and caches it for future runs. For PDFs, each page is rendered at 2x scale, OCR'd, and the recognized text is concatenated with page markers (===== Page N =====). Output is a plain .txt file. Accuracy depends on the source: clean printed text gets near-perfect results, low-resolution scans and handwriting are harder. This is recognition only, the original PDF isn't modified, the text is downloaded as a separate file.

How to use it

  1. Drop a scanned PDF or image. PNG, JPG, WebP, and multi-page PDFs all work.
  2. Pick the language. Choose one of 13 languages — the trained data (~10 MB) downloads once and caches.
  3. Run OCR. Each page is rendered at 2x and recognized locally by Tesseract.js.
  4. Download the text. Grab the .txt output, with page markers between pages, and spot-check the results.

Frequently asked questions

How accurate is the OCR?
On clean printed text at 200+ DPI, typically 95-99% character accuracy. Bad scans, faxes, and handwriting score much lower. The output is plain text, you'll want to spot-check.
Which languages are supported?
13: English, Spanish, French, German, Italian, Portuguese, Dutch, Russian, Chinese (Simplified), Japanese, Korean, Arabic, Hindi. One language per run.
Is OCR done in my browser or on a server?
In your browser. Tesseract.js runs as WebAssembly, the language model loads from CDN once then caches.
Can I OCR a multi-page PDF?
Yes. Each page is processed in sequence and the output text includes page markers.
Saved