fpdf2
Pure-Python PDF creation library with Unicode font embedding, successor to PyFPDF.
Opens the vendor's own site.
Jobs covered
Open a task to see exactly what the vendor documentation supports.
Convert
Browse all convert toolsWhere your files are processed
No server involved
A Python package running in your own interpreter. No service, no account, and no network calls of its own. 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 Python package that runs in your own interpreter. There is no service and no account, and the library makes no network calls of its own, so a document is generated and written entirely on your machine.
What it does
fpdf2 builds PDFs from Python by drawing them: you add pages, place text and images, and control the layout yourself, which is a different job from feeding HTML to a renderer. It is written entirely in Python with few dependencies, embeds and subsets TrueType fonts so Unicode text works properly, and is the maintained successor to PyFPDF.
Its documentation is unusually complete for a small library, including a security section, and the project describes itself as mature and actively maintained.
Best for
Python projects that want precise control over a generated document - a label, a certificate, a form, a report with exact placement - rather than a stylesheet-driven conversion. It is also the natural choice where adding a browser or a heavy native dependency to a container is unwelcome, since it needs neither.
Worth knowing
Primarily a programmatic PDF generator, with basic HTML rendering via write_html; it does not implement full HTML5 or CSS. That is the difference that decides whether it is the right tool: a template you already hold in HTML and CSS will reach a renderer such as WeasyPrint faster, and fpdf2 will have you placing content yourself.
The feature list also covers encryption and digital signing, and those apply to the documents it generates rather than to an existing PDF, which it does not edit.
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
- 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
- LGPL-3.0
- Redaction
- No redaction feature
- Programmatic access
- Embeddable library
- Last availability check
- Responded in 496 ms 21 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.
What that does not establish
Recorded as `none` on absence and structurally: fpdf2 creates PDFs rather than opening them, so there is no existing document for a redaction feature to operate on. What it does not establish: that a generated document is safe.
Its own documentation has a security section, which is about the library's handling of input such as fonts and SVG rather than about the content of what it outputs.
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.
-
“Compared with other PDF libraries, fpdf2 is fast, versatile, easy to learn and to extend (example). It is also entirely written in Python and has very few dependencies: Pillow, defusedxml, & fontTools. It is a fork and the successor of PyFPDF (cf. history).”
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.
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
- f66c5b64cdd77b074f5732df87c4c12d35d91e7158a6ab5a3daac1ca9232ead1
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.
-
“Development status: this project is mature and actively maintained.”
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.
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
- f66c5b64cdd77b074f5732df87c4c12d35d91e7158a6ab5a3daac1ca9232ead1
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.