pypdf
Pure-Python library for splitting, merging, transforming and reading PDF documents.
Where your files are processed
No server involved
A pure-Python library with no service component. It reads and writes files in the caller's own process, so there is no server in the path and nothing for a probe to observe. That is a property of the library itself: what an application built with it does with your file depends on that application, not on this.
A library that runs in your own Python process. There is no service, no account and no network call in the package itself, so a document handled with pypdf never leaves the machine unless the calling code sends it somewhere.
What it does
pypdf is a PDF library written in pure Python, which means it installs anywhere Python does, with no compiled extension and no external binary to keep in step. It splits, merges, rotates and crops pages, adds or reads metadata, and encrypts and decrypts files. It can also retrieve the text layer, though that is the part of its job where stronger tools exist. It is the library Python projects reach for when they need to rearrange documents rather than render them.
Best for: Python projects that need to assemble, split or re-order PDFs as part of something larger, and teams who value a dependency with no native code in it. It also reads metadata and the text layer, with a documented layout-preserving mode when the order of the text matters.
Worth knowing: Text extraction reads the text layer as stored, so a two-column academic paper or a complex table can come out in the wrong reading order. Two things help and both are documented: extract_text(extraction_mode="layout") preserves the layout of the page rather than running the text together, and visitor functions let you walk the page’s own objects when you need control the default modes do not give you. Neither repair a scan, and neither is layout analysis in the sense a table extractor means. For tables, or for documents where reading order is the whole point, pdfplumber and PyMuPDF are built for that job rather than for assembly. It is a structural library, so it manipulates documents as objects rather than rendering them: there is no viewer and no visual check, which means a mistake in page assembly is one you find at the end rather than on screen.
Details, and where each comes from
Vendor statements, our own reading of their pages, and the things nobody has established yet, each answered separately. Where we have not confirmed something it says so rather than guessing, and a row nobody has established is greyed out.
- Versions covered
- Self-hosted · Linux · Windows · macOS
- Website
- github.com
- Requires an account
- Not applicable
- Watermark on the free tier
- Not verified
- Maximum file size
- Not verified
- Batch processing
- Yes
- Data residency
- Self-hosted
- Open source
- Yes
- Self-hostable
- Yes
- Licence
- BSD-3-Clause
- Redaction
- No redaction feature
- Programmatic access
- Embeddable library
- Last availability check
- Responded in 321 ms 16 October 2026
Checked automatically by our own runner, not reported by the vendor. 100% of our last 30 checks got a response.
What the redaction verdict rests on
From the vendor's own documentation, read 22 September 2026. Not tested by us.
“pypdf is a free and open-source pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files. It can also add custom data, viewing options, and passwords to PDF files. pypdf can retrieve text and metadata from PDFs as well.”
What that does not establish: Recorded as `none` on the absence of any redaction feature from the library's own documentation and feature index, not on a test. The quoted description is the whole of the documented surface — page assembly, metadata, passwords, text retrieval — and nothing in it removes content from a page. What it does not establish: that pypdf cannot be used to damage a document. It exposes the object model, so someone determined enough can delete a content stream, but that is rewriting a file rather than redacting one, and it is exactly the distinction this index exists to draw.
What the vendor says
Claims are labelled rather than repeated as fact. Where we have checked something ourselves, it says so and shows when. Checked means we read the vendor's own page and it says what we recorded — not that we tested the behaviour, unless the note says we did.
-
“pypdf is a free and open-source pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files. It can also add custom data, viewing options, and passwords to PDF files. pypdf can retrieve text and metadata from PDFs as well.”
Checked by us — the source says this Read 1 October 2026
Confirmed. The quoted text appears in the rendered page as read on 2026-10-01. This claim was carried as reported rather than checked until this read. The first read of this page captured too little of the rendered text to compare, so it was read a second time with the network quiet.
Standing: Not re-read against the live source
Check it yourself: the source, the SHA-256, and how we checked
- From
- the text a browser renders
- SHA-256
- 412e4fc6b5b0f4bd46b5a5d8b9fa16380ce1f479c480dc448f96f83a251f073d
How we checked: Read as rendered text in headless Chrome on 2026-10-01 and saved to the evidence archive, so the read can be repeated against the same file. Comparison ignores case, punctuation and hyphenation, which is why "open-source" on the record matches "open source" on the page.
Each claim is quoted from the vendor's own pages. This section describes what we have and have not checked — it is not a judgement about anyone.
Sponsorship is distribution, not an endorsement or a promise of search rankings, AI citations, traffic, or sales. This listing is a free entry, compiled from published sources.
Related reading
- Which PDF tools keep your file on your machine — what we count as processing on your own device.
- Open source PDF tools, and what their licences require — what open source does and does not tell you.