7000 stars · MIT (named in the About sidebar and on the package index) · 20260107 (2026-01-07), settled from the package index; the repository sidebar lists no releases, and the recorded code date is 2026-03-13 · Track this in Scout
Reads text, layout, position, font and colour out of a PDF, in pure Python, and writes nothing back.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 13 Mar 2026, 7 months before this check.
Latest release 20260107 on 7 Jan 2026.
Public since August 2014, a little over 12 years.
7,045 stars and 1,049 forks.
0 commits and 15 new issues in the last 90 days.
164 contributors. No pull requests merged in 90 days; changes go in directly.
No security policy file says how to report a problem. 2 published security advisories.
How the bars are scored
- Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
- Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
- Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
- Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
- Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
- Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
- Security. A published security policy 80, none 40; published advisories are listed, not scored.
Checked by Repo Radar on 26 Oct 2026 from the repository on GitHub. Covered in Edition 62.
▶Repo detailsthe review · specs · pros & cons · install
What it does
It parses the PDF directly rather than guessing from a picture of the page, so the text it returns is the text the author typed. For each element it can report the position, the font and the colour, and it performs automatic layout analysis to group characters into lines and blocks. It can write out plain text, HTML or hOCR. It handles Type1, TrueType, Type3 and CID fonts, Chinese, Japanese and Korean text, and vertical writing. It reads the table of contents, tagged content and form fields, and it handles RC4 and AES encrypted files. Embedded JPG, PNG, TIFF, JBIG2 and bitmap images can be extracted with an optional extra. It explicitly does not write, merge, split or encrypt PDFs — every feature it lists is about reading one.
Why it matters
Who it suits. Anyone who receives documents as PDFs and needs the numbers out of them: invoices, statements, reports, scientific papers. It suits a Python project that must not call out to a paid service, because everything happens on the machine running it. Skip it if the PDF is a scan, a photograph of paper with no text inside, because there is nothing for it to read and you need optical character recognition instead.
Verdict. The right default for reading, and it should be paired rather than used alone. Version 20260107 was published on 7 January 2026 and the last code landed on 13 March 2026, so it is maintained but not fast-moving — fair for a library whose job barely changes. The clean division of labour is worth remembering: use this to read, and py-pdf/pypdf to write, merge or split. For tables specifically, jsvine/pdfplumber is built on top of this one and will save you a day. Needs Python 3.10 or newer, and 221 open issues sit on the tracker.
- Reads the real text, not a guess from an image, so the output is exact.
- Reports position, font and colour, which makes finding structure possible.
- No service to call and no model to download. MIT licence.
- Read-only. It cannot write, merge, split or encrypt a PDF.
- Useless on scanned pages, which contain a picture and no text.
- Maintained slowly, with 221 open issues and a release roughly twice a year.
py-pdf/pypdf10.3k stars; the other half of the job, splitting, merging, rotating and reshaping pages, and reading text less precisely.
Track this in Scout
jsvine/pdfplumber10.7k stars, MIT; built on pdfminer.six and adds table extraction, which is usually the thing people actually want.
Track this in Scout
python3 -m venv venv source venv/bin/activate pip install "pdfminer.six[image]" pdf2txt.py statement.pdf > statement.txt
