← PDF: all libraries · Reader board

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

PyMuPDF 2.1 and pdfplumber 0.11.10 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 649
Faster on this setPyMuPDF13.2 s vs 227.6 s total (17× faster)
Both read640only PyMuPDF: 71 · only pdfplumber: 9

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

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

Files only PyMuPDF reads (71)

Brotli-Prototype-FileA.pdfpdfplumber: PdfminerException: Unsupported filter: /'BrotliDecode'
annotation-tx.pdfpdfplumber: no text
annotation-tx2.pdfpdfplumber: no text
annotation-tx3.pdfpdfplumber: no text
annotation_hidden_noview.pdfpdfplumber: no text
bug1250079.pdfpdfplumber: PdfminerException: No /Root object! - Is this really a PDF?
bug1675139.pdfpdfplumber: no text
bug1724918.pdfpdfplumber: no text
bug1770750.pdfpdfplumber: no text
bug1782564.pdfpdfplumber: no text
bug1796741.pdfpdfplumber: no text
bug1802506.pdfpdfplumber: no text
bug1802888.pdfpdfplumber: no text
bug1811510.pdfpdfplumber: no text
bug1825002.pdfpdfplumber: no text
bug1844576.pdfpdfplumber: no text
bug1844583.pdfpdfplumber: no text
bug1851498.pdfpdfplumber: no text
bug1865341.pdfpdfplumber: no text
bug1871353.1.pdfpdfplumber: no text
bug1871353.pdfpdfplumber: no text
bug1922766.pdfpdfplumber: no text
bug1934157.pdfpdfplumber: no text
bug1978317.pdfpdfplumber: no text
bug2026037.pdfpdfplumber: no text
bug2055455.pdfpdfplumber: no text
bug920426.pdfpdfplumber: no text
checkbox_no_appearance.pdfpdfplumber: no text
dates_save.pdfpdfplumber: no text
evaljs.pdfpdfplumber: no text
franz_2.pdfpdfplumber: PdfminerException: unsupported operand type(s) for +: 'int' and 'PDFObjRef'
freetext_no_appearance.pdfpdfplumber: no text
freetexts.pdfpdfplumber: no text
issue11549_reduced.pdfpdfplumber: PdfminerException: Invalid dictionary construct: [/'BaseFont', /'AASGAA+Arial,Unicode', /b'MS', /'DescendantFonts', [<PDFObjRef:56>], /'Encoding', /'Identity-H'
issue1293r.pdfpdfplumber: no text
issue15716.pdfpdfplumber: no text
issue15815.pdfpdfplumber: no text
issue15818.pdfpdfplumber: no text
issue16021.pdfpdfplumber: no text
issue16473.pdfpdfplumber: no text

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

Files only pdfplumber 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

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