Converting a scanned PDF: what you get today
Updated:
EpubCC does not do OCR yet. A scanned page with no text layer is left out with a warning; a scan that already carries an OCR layer is converted from that hidden text, with its errors. On an 1867 Alice scan our 8-gram recall is 0.513, below PDFium (0.651) and pdf_oxide (0.632).
Original and result
A photographed 1867 book: every page is an image, with an invisible OCR text layer added by the scanning project. The OCR has misread words, split lines and put illustration captions in the middle of the text.


Download source PDF Download the sample EPUB
Scanned or not: how the engine decides
A page counts as scanned when one image covers the whole page and there is no selectable text. The engine does not decode those images (that is where OCR would start) and reports the page numbers in the quality report, before you pay for anything.
When the scan has a text layer, the engine treats it like any other text. It cannot know that the text came from an old OCR pass, so the result is only as good as that OCR.
What to do with a scanned book today
Run OCR first with a tool you trust, then convert the result; or keep the PDF. OCR is planned as a separate route; this page will change when it exists.
Source and licence
- Document
- Alice's Adventures in Wonderland, 1867 printing (scan, Internet Archive)
- Licence
- Public domain (1867; University of Toronto scan on the Internet Archive)
- Pages
- 212
- Traits
- scanned, OCR layer, book, chapters, illustrations
Lewis Carroll, Alice's Adventures in Wonderland, Macmillan, 1867 printing (public domain); scan and OCR by the University of Toronto, published on the Internet Archive (alicesadventu00carr).
Settings used
- Engine: EpubCC engine at commit 3b74b26, the binary that generated the images and the sample (2026-11-04).
- Pages: the whole document for the figures; pages 20–21 for the images and the sample EPUB.
- Benchmark figures: the published run of 2026-11-03 (engine commit c953279).
- Options: none. The engine has no per-document settings yet; the same defaults apply to every file.
Validation and results
EPUBCheck EPUBCheck on our EPUB: 0 errors, 0 warnings.
EPUBCheck 5.4.0 on the downloadable sample: 0 errors, 0 warnings (checked 2026-11-04).
- Pages
- 212
- Time
- 0.87 s
- Peak memory
- 284 MB
- Pages left out as scans
- 14
- Chapters
- 132 (false headings from the OCR layer)
Quality warnings the engine showed:
- 14 pages look scanned (a full-page image and no selectable text) and are left out: 1, 3–8, 10, 14, 16, 209–212. OCR conversion is not available yet.
| Engine | 8-gram recall |
|---|---|
| EpubCC engine (EPUB output) | 0.513 |
| EpubCC engine (plain text) | 0.494 |
| pdf_oxide · extract_text | 0.632 |
| pdf_oxide · to_plain_text (XY-cut) | 0.639 |
| pdf_oxide · Markdown | 0.524 |
| PDFium · text().all() | 0.651 |
| OpenDataLoader PDF (local mode) | 0.625 |
| pdftotext (Poppler) | 0.156 |
Limitations we observed
- No OCR: pages that are only an image are left out of the EPUB, and the report lists them (14 here: covers, plates and library pages).
- OCR errors in the PDF are copied, not corrected: «MAKMALADE» for MARMALADE, «I Ve» for I've.
- Words the OCR placed on a slightly different baseline become superscripts, and chapter openings with drop caps produce false headings (132 «chapters» instead of 12).
- PDFium (0.651), pdf_oxide (0.632) and OpenDataLoader (0.625) recover more of this OCR text than our engine (0.513).
- The reference is a different edition (Project Gutenberg, 1865): good for recall, not for exact precision.