Solve: real PDFs, worked end to end
Every page in this section starts from a genuinely bad PDF — the kind that shows up after a records request or a scrape — states why it resists extraction, and works the solution in runnable code. Each page is also downloadable as a notebook. Same-repository examples use checked-out files under pdfs/ during the docs build, and notebook export rewrites those paths to raw GitHub URLs so you can still run them top to bottom in Colab. A few externally hosted records remain URL inputs because they are not committed to this repository.
If you’re new to the library, start with Learn; come here when you have a document that looks like one of these.
Tables without borders
Section titled “Tables without borders”Tables that span pages
Section titled “Tables that span pages”Scans and OCR
Section titled “Scans and OCR”Multi-column layouts
Section titled “Multi-column layouts”Redactions and form printouts
Section titled “Redactions and form printouts”Non-Latin and right-to-left scripts
Section titled “Non-Latin and right-to-left scripts”Where these come from
Section titled “Where these come from”These documents are drawn from Bad PDFs, a collection of real problem PDFs submitted by journalists and researchers, each with a worked Natural PDF solution. If you have a PDF that deserves a page here, submit it there.