/fpdf2

Simple PDF generation for Python

Primary LanguagePythonGNU Lesser General Public License v3.0LGPL-3.0

build status Pypi latest version License: LGPL v3 codecov

Pull Requests Welcome first-timers-only Friendly -> come look at our good first issues

fpdf2

fpdf2 logo

fpdf2 is a minimalist PDF creation library for Python:

from fpdf import FPDF

document = FPDF()
document.add_page()
document.set_font('helvetica', size=12)
document.cell(txt="hello world")
document.output("hello_world.pdf")

It is a fork and the successor of PyFPDF. Compared with other PDF libraries, fpdf2 is simple, small and versatile, with advanced capabilities, and is easy to learn, extend and maintain.

Looking for Developer Help!

Installation Instructions:

pip install fpdf2

To get the latest development version:

# Linux only:
sudo apt-get install libjpeg-dev libpython-dev zlib1g-dev # libpython3.3-dev #(if necessary)

# Linux and Windows:
git clone https://github.com/PyFPDF/fpdf2.git
cd fpdf2
python setup.py install

Features:

  • Python 3.6+ support
  • Unicode (UTF-8) TrueType font subset embedding
  • Internal/External Links
  • PNG, GIF and JPG support (including transparency and alpha channel)
  • Shape, Line Drawing
  • Generate Code 39 & Interleaved 2 of 5 barcodes
  • Cell / multi-cell / plaintext writing, automatic page breaks
  • Basic conversion from HTML to PDF
  • Images & links alternative descriptions
  • Table of contents & document outline
  • Optional basic Markdown-like styling: **bold**, __italics__, --underlined--
  • Clean error handling through exceptions
  • Only one dependency so far: Pillow
  • Unit tests with qpdf-based PDF diffing

We validate all our PDF samples using 3 different checkers:

QPDF logo PDF Checker logo VeraPDF logo

Documentation:

You can also have a look at the tests/, they're great usage examples!

Developers:

Please check the documentation page dedicated to development.

Contributors ✨

This library could only exist thanks to the dedication of many volunteers around the world:


Mariano Reingart

πŸ’»

David Ankin

πŸ› πŸ’» πŸ“– 🚧 πŸ’¬ πŸ‘€ ⚠️

Alex Pavlovich

πŸ› πŸ’» πŸ“– πŸ’¬ πŸ‘€ ⚠️

Lucas Cimon

πŸ“ πŸ’» πŸ“– πŸš‡ 🚧 πŸ’¬

Miroslav Ε edivΓ½

πŸ’» ⚠️

Florian Bernhart

πŸ’» ⚠️

Edwood Ocasio

πŸ’» ⚠️

Marcelo Duarte

πŸ’»

Roman Kharin

πŸ’» πŸ€”

Christopher Frost

πŸ› πŸ’»

Michael Kalbermatten

πŸ› πŸ’»

Yanone

πŸ’»

Leo Zhu

πŸ’»

Abishek Goda

πŸ’»

Arthur Moore

πŸ’» ⚠️ πŸ›

Bogdan Cuza

πŸ’»

Craig Hobbs

πŸ’»

xitrushiy

πŸ› πŸ’»

JosΓ© L. Redrejo RodrΓ­guez

πŸ’»

JΓΌrgen Gmach

πŸ’»

Larivact

πŸ’»

Leonel CΓ’mara

πŸ’»

Mark Steadman

πŸ› πŸ’»

Sergey

πŸ’»

Stan-C421

πŸ’»

Viraj Shah

πŸ’»

cornicis

πŸ’»

moe-25

πŸ’» πŸ‘€ πŸ›

Simone Bizzotto

πŸ’»

Boonyawe Sirimaha

πŸ›

This project follows the all-contributors specification (emoji key). Contributions of any kind welcome!

Contributors map

(screenshot from June 2021, click on the map above to access an up-to-date online version)

Other libraries

For alternatives, check out this detailed list of PDF-related Python libs by Patrick Maupin. There is also pikepdf, PyFPDF2 & WeasyPrint.