← PDF: all libraries · Reader board

markitdown vs PyMuPDF: which one reads more real-world PDF files?

markitdown 0.1.9 and PyMuPDF 2.1 on the same 1,077 odd real-world files from Mozilla pdf.js test PDFs (bug reports, fuzzers, broken exporters). Measured, not opinion; re-tested by itself on every new PyPI release. Updated 06 November 2026.

More files readPyMuPDF711 vs 648
Faster on this setPyMuPDF13.2 s vs 516.3 s total (39× faster)
Both read639only markitdown: 9 · only PyMuPDF: 72

PyMuPDF got text from more files: 711 vs 648 of 1,077. markitdown broke (error, hang or crash) on 9 files that PyMuPDF read; PyMuPDF broke on 3 files that markitdown read.

LibraryText from🔴 Fails where
the other reads
🟡 Empty where
the other reads
⏱ Hangs or
crashes
Median
ms/file
Total
seconds
markitdown 0.1.9648963194516.3
PyMuPDF 2.1711360213.2

Files only markitdown reads (9)

Pages-tree-refs.pdfPyMuPDF: FzErrorFormat: code=7: cycle in page tree
annotation-text-without-popup.pdfPyMuPDF: no text
issue11144_reduced.pdfPyMuPDF: no text
issue15893_reduced.pdfPyMuPDF: ValueError: document closed or encrypted
issue19326.pdfPyMuPDF: no text
poppler-67295-0.pdfPyMuPDF: RuntimeError: code=7: Invalid number of pages
poppler-91414-0-53.pdfPyMuPDF: no text
poppler-91414-0-54.pdfPyMuPDF: no text
recursiveCompositGlyf.pdfPyMuPDF: no text

Files only PyMuPDF reads (72)

Brotli-Prototype-FileA.pdfmarkitdown: FileConversionException: File conversion failed after 1 attempts: - PdfConverter threw PDFNotImplementedError with message: Unsupported filter: /'BrotliDecode'
annotation-tx.pdfmarkitdown: no text
annotation-tx2.pdfmarkitdown: no text
annotation-tx3.pdfmarkitdown: no text
annotation_hidden_noview.pdfmarkitdown: no text
bug1250079.pdfmarkitdown: FileConversionException: File conversion failed after 1 attempts: - PdfConverter threw PDFSyntaxError with message: No /Root object! - Is this really a PDF?
bug1675139.pdfmarkitdown: no text
bug1724918.pdfmarkitdown: no text
bug1770750.pdfmarkitdown: no text
bug1782564.pdfmarkitdown: no text
bug1796741.pdfmarkitdown: no text
bug1802506.pdfmarkitdown: no text
bug1802888.pdfmarkitdown: no text
bug1811510.pdfmarkitdown: no text
bug1825002.pdfmarkitdown: no text
bug1844576.pdfmarkitdown: no text
bug1844583.pdfmarkitdown: no text
bug1851498.pdfmarkitdown: no text
bug1865341.pdfmarkitdown: no text
bug1871353.1.pdfmarkitdown: no text
bug1871353.pdfmarkitdown: no text
bug1922766.pdfmarkitdown: no text
bug1934157.pdfmarkitdown: no text
bug1978317.pdfmarkitdown: no text
bug2026037.pdfmarkitdown: no text
bug2055455.pdfmarkitdown: no text
bug920426.pdfmarkitdown: no text
checkbox_no_appearance.pdfmarkitdown: no text
dates_save.pdfmarkitdown: no text
evaljs.pdfmarkitdown: no text
franz_2.pdfmarkitdown: FileConversionException: File conversion failed after 1 attempts: - PdfConverter threw TypeError with message: unsupported operand type(s) for +: 'int' and 'PD
freetext_no_appearance.pdfmarkitdown: no text
freetexts.pdfmarkitdown: no text
issue11549_reduced.pdfmarkitdown: FileConversionException: File conversion failed after 1 attempts: - PdfConverter threw PSSyntaxError with message: Invalid dictionary construct: [/'BaseFont',
issue1293r.pdfmarkitdown: no text
issue15716.pdfmarkitdown: no text
issue15815.pdfmarkitdown: no text
issue15818.pdfmarkitdown: no text
issue16021.pdfmarkitdown: no text
issue16473.pdfmarkitdown: no text

…and 32 more: see each library's page.

Don't want to run it yourself? I also run PDF & Document to Markdown as a pay-per-use API on Apify (it uses pdfplumber and pypdfium2 for PDFs, markitdown for Office files). Disclosure: that tool is mine; the rankings above come only from the measurements.

What this does not tell you

This compares not breaking: whether each library gets any text out of each file. It does not rank text quality (reading order, tables, headings), and speed is one GitHub-hosted runner, default settings, no OCR switched on. If you need structure for RAG, also look at the output on your own files.

How this is measured