OCRmyPDF

Adds a searchable OCR text layer beneath page images and produces a validated PDF/A file: deskews crooked pages, optionally cleans images pre-OCR, optimizes/compresses images, recognizes 100+ languages via Tesseract, rotates misrotated pages, edits output metadata, parallelizes across CPU cores, and processes multi-thousand-page files in place.

Sample Results

Real output from running this tool against a sample PDF, as part of PDFog's open-source PDF tooling benchmark.

Input: sample-brochure.pdf

Loading PDF…

uv run ocrmypdf --skip-text --sidecar "sample-brochure--ocrmypdf-python.pdf" "sample-brochure.pdf" "sample-brochure--ocrmypdf-python.pdf"
uv run ocrmypdf --skip-text --sidecar "sample-brochure--ocrmypdf-python.txt" "sample-brochure.pdf" "sample-brochure--ocrmypdf-python.txt"

Output: sample-brochure--ocrmypdf-python.txt

[OCR skipped on page(s) 1]

--force-ocr: rasterizes every page and re-OCRs from scratch, ignoring any existing text layer — a genuinely different extraction path than --skip-text above (which trusts existing text and only OCRs image-only pages).

uv run ocrmypdf --force-ocr --sidecar "sample-brochure--ocrmypdf-python--force-ocr.pdf" "sample-brochure.pdf" "sample-brochure--ocrmypdf-python--force-ocr.pdf"

--force-ocr: rasterizes every page and re-OCRs from scratch, ignoring any existing text layer — a genuinely different extraction path than --skip-text above (which trusts existing text and only OCRs image-only pages).

uv run ocrmypdf --force-ocr --sidecar "sample-brochure--ocrmypdf-python--force-ocr.txt" "sample-brochure.pdf" "sample-brochure--ocrmypdf-python--force-ocr.txt"

Output: sample-brochure--ocrmypdf-python--force-ocr.txt

ma

REAL ESTATE

WILL DO THE BEST FOR YOU

221 Queen Street, Melbourne VIC 3000
apartment Fa; 2 wy 1 @m 1 $1,000,000

Prince Cascading

1234-5678

Additional Information

Land Size 1171m2

House Size -
Map Ref. -
Energy Rating -

Council Rates -

Water Rates -

Ga —
Melbourne
Central

WARM BEAUTIFUL APARTMENT

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc turpis ante, fermentum ac
cursus vitae, tempus vel ipsum. Proin justo lorem, mattis sed pharetra ac, vehicula
tincidunt sem. Mauris est leo, scelerisque at gravida vel, interdum quis felis. Nullam
nibh magna, consectetur eu aliquet ac, sollicitudin eget nisl. Praesent nibh tellus,
elementum ut scelerisque a, pretium eget libero. Morbi sodales tincidunt turpis et
sagittis. Aenean sed dictum nisi.

Phasellus quis metus lectus. Donec varius pellentesque purus, et ornare enim
pellentesque sed. Morbi quam augue, pulvinar sit amet mollis in, euismod porta orci.
Quisque rutrum egestas enim ac viverra. Mauris blandit tristique feugiat. Ut molestie
molestie turpis sed elementum. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Maecenas in nunc odio. Nunc sagittis, mi ut ornare pellentesque, orci augue dapibus
est, vel rutrum elit orci vel augue.