Paperly / Scanned PDF OCR
OCR a scanned PDF without sending it anywhere
A scanned PDF is a pile of photographs of paper. There is no text inside it to extract, so something has to look at the pixels and guess the characters. Paperly runs that step in the browser tab with a WebAssembly build of Tesseract.
Run OCR on a scan ↗First: is it actually scanned?
Open the file and try to drag-select a sentence. If nothing highlights, the page has no text layer. Another quick tell: a 40-page text PDF is usually under 2 MB, while a 40-page scan is often 20 MB or more, because every page is a full image.
Paperly makes the same check automatically. A page with fewer than roughly thirty extractable characters is routed to OCR instead of the text pipeline, so mixed documents work too: typed pages are parsed normally, scanned pages are recognised.
How the local pipeline runs
- The PDF is opened with pdf.js inside the tab.
- Each page is rendered to a canvas at double resolution — OCR quality depends heavily on how many pixels the recogniser gets.
- The canvas is handed to a Tesseract worker running as WebAssembly, one worker per language set, reused across pages.
- Word boxes come back with coordinates. Lines are rebuilt from them, and headings are estimated from section numbering rather than font size, because a rendered image has no font metadata.
Nothing in that list touches the network except the first model download.
Languages and their cost
| Model | Download | Best for |
|---|---|---|
| English | ≈3 MB | Contracts, invoices, reports, English receipts |
| Simplified Chinese | ≈1.7 MB | Mainland documents, receipts, statements |
| English + Chinese | both | Mixed-language paperwork; slower per page |
Models download once and stay in the browser cache. Choosing a language you have not used before triggers a one-time download, which is why the first scan of a new language pauses for a moment.
What improves accuracy
- Resolution. 300 DPI scans recognise far better than 150 DPI faxes. The renderer already doubles the page, but it cannot invent detail that was never captured.
- Deskew. A page rotated by two degrees loses whole lines. Straighten it in any viewer before converting.
- Contrast. Grey-on-grey photocopies are the worst case; a levels adjustment beforehand pays for itself.
- One language at a time. Selecting English + Chinese makes the model consider both character sets and increases confusion on single-language pages.
After recognition
The output is Markdown with headings, lists and simple tables where the geometry allowed it. From there it can be copied as rich text into Notion or Docs, downloaded as .md, or exported to Word, Excel, PowerPoint or EPUB. For a walk through the conversion side, see PDF to Markdown.
Questions
How do I know if my PDF is scanned?
Try to select a sentence. If nothing highlights, there is no text layer and OCR is required. Pages under about thirty extractable characters are treated as scans automatically.
Which languages are supported?
English and Simplified Chinese, individually or together. Each is a separate model, downloaded on first use.
Why is a scan slower than a normal PDF?
A text PDF is parsed in milliseconds. A scan must be rendered to a canvas and recognised line by line, which is CPU work. Expect a few seconds per page on a laptop, longer on a phone.
Does OCR work on tables in scans?
Partially. Columns are inferred from word positions, so a clean table with visible alignment usually converts. Merged cells and borderless tables are unreliable.