Skip to content

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.

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.