Skip to content
dialegein

fpdf2

Pure-Python PDF creation library with Unicode font embedding, successor to PyFPDF.

Visit fpdf2

Opens the vendor's own site.

Jobs covered

Open a task to see exactly what the vendor documentation supports.

Convert Browse all convert tools
Protect Browse all protect tools

encrypts the PDF it generates, not an existing file

Sign Browse all sign tools

signs the PDF it generates, not an existing file

Where 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.

https://github.com/py-pdf/fpdf2

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.

    What this hash proves, and what it does not

  • “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.

    What this hash proves, and what it does not

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.

Visit fpdf2 Report a problem

Related reading

How this record was put together

Editorial review.
No editor has signed this record off. That is not the same as nothing having been checked, and the lines below say what has.
Source reading.
2 claims taken from the vendor's own pages, read between 1 October 2026 and 1 October 2026.
Website availability.
The vendor's site was last checked on 21 October 2026.
Behaviour testing.
We ran this ourselves. The file handling was watched directly.

Sources: The project repository at github.com/py-pdf/fpdf2, read 2026-09-22 with headless Chrome, including the README's description, feature list and development-status statement. Project documentation, not independently tested; the package was not installed and no PDF was generated.