OCR PDF
Drop a PDF and get its text back in this tab. Pages that already carry a text layer are read directly — exact, and done in milliseconds; only pages that are pictures go through recognition. Every page is listed with the route it took, so you can see which pages were read and which were guessed at. The file is not uploaded.
Drop a PDF here
or choose a file · one PDF at a time · up to 100 MB and 100 pages
Empty means every page. A page range changes which pages are read; pages already read are kept.
Only pages without a text layer are rendered at this resolution. Higher costs time on every picture page.
PDF in, text out · text layer read directly · picture pages recognized in the tab · English · up to 100 pages · no upload · no account · no watermark
OCR a PDF: Read the Text Layer First
A PDF page holds either the instructions that drew its text, or a picture of that text. Pull out the first kind and you get every character, in milliseconds, with nothing to guess. The second kind has to be recognised, which costs seconds on every page and can come back wrong.
The tool above checks each page before it does any work. On a three-page memo it returned 2,926 characters from the text layer in 127 ms, with recognition never starting. The same three pages printed to images and wrapped back into a PDF gave up nothing from their text layers, so recognition ran: 7.2 seconds for the same 2,926 characters, two of them wrong on each of two pages.
That order is the whole design. Recognition is the fallback, not the first move.
How to get the text out of a PDF here
- Add the PDF. Drop it on the box above or pick it with the file chooser. One file at a time, up to 100 MB and 100 pages.
- Leave Pages empty, or type a range.
3reads page 3;1-5reads the first five;2, 7, 9-11reads those four. Changing the range re-reads only what you asked for, and pages already read are kept. - Set the scan resolution if you need to. 200 DPI is the default. It applies only to pages that have no text layer, because a page with text never gets rendered at all.
- Read the page list. Each row says which route the page took, how many characters came back, and how long it took. Recognised pages also show a confidence figure.
- Copy or download. The text area holds every page in order, each one prefixed with a marker like
— Page 4 (recognized) —. The download button saves the same text as a .txt file.
There is no Run button. Dropping a file starts the read, and moving a control restarts it with the pages that are still missing. A long job can be stopped after the page in flight, and what has been read so far stays in the box.
The resolution slider is the only control that changes quality. Higher settings give recognition more pixels per character, which costs time on every picture page and does nothing at all for pages that carry text.
A page is either instructions or a picture
A PDF page is a small program. Its content stream holds operators such as Tj (show this string), Tf (use this font at this size), and Tm (put the next glyphs at this position). The characters in that stream are real characters, mapped through the font's encoding to Unicode. A reader like the one running here does not look at the page, it runs the program and collects the strings.
That is what the page list calls a text layer. Page one of the memo used for the numbers above carries 27 of these string items, page two 25 and page three 23, and reading all three took 67 ms, 19 ms and 2 ms. Nothing was recognised, because there was nothing to recognise: the words were already in the file.
A scanned page is the other shape. Its content stream holds one operator, Do, which paints an image across the whole page. The image is a JPEG or a CCITT bitmap of the paper. There are no strings, no font, and no encoding to map. In the scanned version of the same three pages, the text layer held zero characters on every page.
The two files are the same document. One weighs 5,317 bytes, the other 516,128 bytes, and only one of them can tell you what it says without help.
What each route costs
| Route | Per page | Characters | Characters wrong |
|---|---|---|---|
| Text layer, 3 pages | 67 ms, 19 ms, 2 ms | 1,131 / 1,071 / 724 | 0 |
| Recognition at 200 DPI | 2.78 s, 2.51 s, 1.86 s | 1,131 / 1,071 / 724 | 0 / 2 / 2 |
The recognition column is a warm run: the engine had already been loaded by the page before. The first page of a cold run took 5.29 seconds, because that page pays for starting the engine. After that the cost settles at roughly two seconds for a page of this density, A4 at 200 DPI, around 1,100 characters.
A mixed file shows the split plainly. Two pages, the first exported from a word processor and the second scanned: page 1 came back in 24 ms with every character, page 2 took 2.57 seconds and two characters were wrong.
Recognition confidence is worth reading as a ranking, not a grade. The pages above scored 95, 95 and 94, and the two pages with score 95 were not the two pages with errors. A low score is a useful warning that something on the page is unusual. A high score does not promise a clean read.
The text layer is exact, but not always in reading order
Exact means every character matches what the file says. It does not mean the characters arrive in the order a person would read them. The extractor follows the content stream, and a content stream is written to draw, not to read.
A single page with two columns makes this visible. Drawn left column first, then right, at the same heights, the text came back interleaved:
Left column, line one. Right column, line one.
Left column, line two. Right column, line two.
That is 203 characters in 22 ms, every one of them correct, in an order no reader would use. A one-column letter or invoice is unaffected. A newspaper page, a two-column academic paper or a side-by-side form will need the columns split by hand afterwards.
Three smaller habits of text layers:
- Hyphenation stays. A word broken across lines arrives as
mainte-on one line andnanceon the next. Recognition tends to join it, a text layer does not. - Ligatures can vanish or split. An
fidrawn as one glyph may come back asfi, asfplusi, or as a placeholder, depending on the font's Unicode map. - A scanned PDF can carry an old text layer. If someone ran OCR on it years ago, the text is there, and it is that engine's guess, sitting in the file. The page list will call it a text layer because it is one. Nothing in the file records how good that guess was.
The last case is the reason the page list shows the route. A page that says "text layer" is exact with respect to the file, not necessarily with respect to the paper.
Resolution buys quality only until it does not
The scan resolution control decides how many pixels a picture page is rendered into before recognition. More pixels mean more detail per character and more work per page. On the clean, 150 DPI render used here, the extra pixels bought nothing.
| Rendered at | Page pixels | Three pages | Characters wrong |
|---|---|---|---|
| 150 DPI | 1,240 × 1,754 | 5.4 s | 0 / 2 / 2 |
| 200 DPI | 1,653 × 2,339 | 7.2 s | 0 / 2 / 2 |
| 250 DPI | 2,066 × 2,924 | 7.0 s | 0 / 2 / 1 |
| 300 DPI | 2,479 × 3,508 | 7.9 s | 1 / 2 / 2 |
At 300 DPI the page is 8.7 million pixels, 3.5 times the 150 DPI render, and the cleanest score was at 150. That is not an argument for always using the lowest setting. It is an argument for starting at 200 and moving up only when the page list shows a page scoring badly or coming back short.
The threshold that decides "text layer or picture" is 25 non-space characters on a page. Below that, a page is treated as a picture. This catches the common case of a scanned page that carries a stray footer number, where the only text in the file is 12.
What you get back, and what you do not
The output is text, page by page, with a marker before each page. It is not a new PDF with an invisible text layer behind the scan. Nothing here writes a PDF, so if what you need is a searchable document to file or to send on, this tool gives you the words and leaves the PDF as it was.
Per page you get the route, the character count, the time, and for recognised pages a confidence figure. Pages that fail are marked in the list and named in the output instead of being skipped silently. A page with no ink at all comes back empty, which is also what a page rendered far too small looks like.
Text is plain UTF-8. Line breaks follow the page, blank lines separate paragraphs where the layout had them, and nothing is reflowed into a single paragraph. That keeps the output usable as an address block or a column of figures, at the cost of the ragged line ends a PDF page always has.
Why this runs without an upload
The PDF is parsed and the pages are drawn by a copy of the PDF.js library served from this site. Recognition runs in Tesseract, compiled to WebAssembly, also served from here. Both load the first time you use the tool and are then held by the browser tab.
A test run with the network switched off, after the engine had loaded, produced exactly the same 2,926 characters as the online run at the same setting: same SHA-256 hash, no request leaving the tab. A file that never leaves the tab cannot be stored on a server, cannot be logged, and cannot be kept after you close it.
What that does not cover: the page still loads from a web server, so the server knows a page was opened. It does not see the file.
When the text layer is missing and recognition is the wrong answer
Recognition is a guess about pixels, so it is worth one minute checking whether a better source exists before running 40 scanned pages through it.
- Ask for the original export. If the PDF came from Word, Google Docs, InDesign or a billing system, the same text exists in a format that carries its characters. A PDF printed from that source, rather than scanned, has a text layer you can read in milliseconds.
- Re-scan at 300 DPI in greyscale. A 150 DPI colour scan of small print loses about as much as JPEG compression does. Greyscale at 300 DPI is usually smaller than colour at 150 and recognisably better on 8-point text.
- Photograph flat, then crop. A phone photo of a page is usable if the page fills the frame and the light is even. Skew and shadow cost more accuracy than resolution buys back.
- Split the job. If only the signature page or one appendix is a scan, read the text pages first and send just the scanned pages through recognition. The page field makes this a two-step job rather than a 40-page wait.
Questions that come up
Can I read just one page of a long PDF? Yes. Put the page number or a range in the Pages field before or after the file loads; pages already read stay in the output, so reading pages 1-20 and then adding 34 is two quick runs rather than one long one.
Why is a page empty when I can see text on it? Two usual causes: the page is an image so small that recognition finds nothing, or the text sits in a form field or annotation that a page render does not paint. Raise the resolution first; if the page is a form, the values are in the form fields, not in the page content.
Does this make my PDF searchable? No. It returns the text as a .txt file. Adding a text layer behind the scan means writing a new PDF, which this tool does not do.
Does it read handwriting? Badly. The engine is trained on printed text. A form filled in by hand will come back with the printed labels and very little of the handwriting.
What about a password-protected PDF? It cannot be opened here, and the tool says so. Remove the password in a reader you trust first, then drop the file in.
Which languages does it read? English. A page in another language will come back with plausible-looking mistakes rather than an error, so check a sample before trusting a long document.
Is there a file size limit? 100 MB and 100 pages per file. A page of dense text adds roughly two seconds at 200 DPI, so 100 scanned pages is a few minutes of work in the tab, during which the tab should stay open.