Added
- support for Output Intents on document level - thanks to @lka
- support for shading patterns (gradients) - thanks to @andersonhc - PR 1334
- support for setting a minimal row height in tables
- support for
v_align
at the row level in tables - new optional
reset_page_indices
parameter forinsert_toc_placeholder()
- support for
strikethrough text - support for
first_line_indent
intext_region.Paragraph
- new ViewerPreferences.print_scaling
- documentation on
fpdf2
internals - documentation on generating Aztec Codes
- added Slovenian translation of the tutorial: Vodič - thanks to @DeepBlackHole
- support for adding TrueType fonts that are missing the
.notdef
glyph - issue 1161 - thanks to @spacegaori - improved SVG image parsing speed by 50% to 70% - thanks to @petri-lipponen-movesense - PR 1350
- added tutorial "tuto7" (in English and German) with documentation to create PDF/A files with fpdf2 - thanks to @lka
Fixed
FPDF.write_html()
: Fixed rendering of content following<a>
tags; now correctly resets emphasis style post</a>
tag: hyperlink styling contained within the tag authority. - issue 1311- FPDF.footer() does not "leak" its text style to the table of contents anymore
FPDF.table()
: Fixed heading styles containing underline failing to render.FPDF.ln()
: the method now allows a value of0
to be provided forh
.- font optimization: only include fonts effectively used in the final PDF document. Fonts added via
set_font()
oradd_page()
but not actually used in the document are no longer included in the final output. This reduces file size and improves performance, especially for documents with many fallback fonts. - issue 1382 - a
KeyError
was raised in some specific cases when auto-downscaling images - issue 1409Changed
- heading rows of tables are never rendered "alone" on a page anymore
C code can be compiled to run within a PDF using and old version of Emscripten that targets asm.js instead of WebAssembly. Then, all that's needed is a way to get key inputs, and a framebuffer for the output. Inputs are fairly straightforward, since Chromium's PDF engine supports text fields and buttons. Getting a good looking and fast enough framebuffer is a lot more of a challenge though.
A short Python script based on pypdf that checks if PDF files contain JavaScript code, and if applicable print it.

The author produce a playable PDF, a file that can be read both as a PDF document and executed as a Windows program: https://github.com/mwenge/iatheory/releases/tag/0.1
This is polyglot program
Iridis Alpha is a classic of the 8-bit home computer era. An innovative, side-scrolling shoot-em-up for the Commodore 64 published by Llamasoft in 1985 that was notable then and now for its technical accomplishment.
IRIDIS ALPHA THEORY unpacks the assembly code of the game and pores over it in minute detail. There are also lots of pretty pictures.
Discovered in Paged Out! issue #5
I wrote my last post on fpdf2
18 months ago.
We released 7 more versions of fpdf2
since then!
This article will present some of the major features introduced since v2.7.3 to v2.8.1 of fpdf2
:
click on the buttons below to reveal the various changes brought …
Simple & free online website to build a map with several numbered & colored markers on points-of-interest (locations), and then print it to PDF or share it with a URL.
I wrote my latest post on fpdf2
almost a year ago.
As we just released a new version, v2.7,
this is the time to mention some recent additions to this library! 😊
This article will present some of the major features introduced between v2.5.3 & v2.7.3 of …
Comme promis il y a deux semaines, voici la traduction du génialissime one-page-dungeon de Michael Prescott :

C'est un condensé de pépites narratives entrelacées et assemblées en une seule page : un labyrinthe à explorer, des énigmes basées sur l'environnement, des rencontres aléatoires, des artefacts pertinents à …
A 40-page Bachelor’s degree thesis on the legendary bit-hacking Quake III Q_rsqrt() implementation:
Following last week animated PDF adventure, I have been reading a series of one page dungeons... And yesterday I had the opportunity to play the best one in my opinion: The Sky-Blind Spire by Michael Prescott.
It has everythng I love on one page: a maze to explore, mysteries to …
Last week, while translating John Harper's micro-TTRPG World of Dungeons: Turbo Breakers, I discovered the wonderful world of one page dungeons, starting with Michael Prescott splendid production at trilemma.com and also the yearly One Page Dungeon Context.
While crawling through the OPDC 2021 entries, I discovered a great map …
-
« Le Frido » contient des mathématiques du niveau de l'agrégation. Il couvre (à peu près) tout le programme.
-
« Giulietta » contains more or less everything I know in mathematics.
This document is a compilation of many stuff I wrote during my mathematical live. There are mainly three parts :
— Exercises for undergrad (in French).
— Theory for undergrad (in French, mainly devoted to l’agrégation)
— Theory I studied during my thesis (in English)
— Some research material (the BTZ part, in English)Il existe de nombreux logiciels de mathématique. Notre préféré est Sage pour une raison très précise : Sage est (en simplifiant) un module pour python. Donc quand on travaille en Sage, on dispose de tout Python.
fpdf2
is a simple & fast PDF creation library for Python that I have been maintaining since mid-2020.
In this article, I'm going to present some of the new features that landed since my last post on the subject. Hence, this will cover versions 2.5.0, 2.5.1 & 2 …
Added
- new parameters
new_x
andnew_y
forcell()
andmulti_cell()
, replacingln=0
, thanks to @gmischler - new
add_highlight()
method to insert highlight annotations: documentation - new
offset_rendering()
method: documentation - new
.text_mode
property: documentation - the page structure of the documentation has been revised, with a new page about adding text, thanks to @gmischler
- a warning is now raised if a context manager is used inside an
unbreakable()
section, which is not supported
Changed
local_context()
can now "scope" even more properties, likeblend_mode
: documentation
Fixed
- No font properties should be leaked anymore after using markdown or in any other situations (cf. #359), thanks to @gmischler
- If
multi_cell(align="J")
is given text with multiple paragraphs (text followed by an empty line) at once, it now renders the last line of each paragraph left-aligned,
instead of just the very last line (cf. #364), thanks to @gmischler - a regression: now again
multi_cell()
always renders a cell, even iftxt
is an empty string - cf. #349 - a bug with string width calculation when Markdown is enabled - cf. #351
- a few bugs when parsing some SVG files - cf. #356, #358 & #376
- a bug when using
multi_cell(..., split_only=True)
inside anunbreakable
section - cf. #359
Deprecated
- The parameter
ln
tocell()
andmulti_cell()
is now deprecated, usenew_x
andnew_y
instead. - The parameter
center
tocell()
is now deprecated, usealign="C"
instead.
Displaying deprecation warnings
DeprecationWarning
s are not displayed by Python by default.
Hence, every time you use a newer version of fpdf2
, we strongly encourage you to execute your scripts
with the -Wd
option (cf. documentation)
in order to get warned about deprecated features used in your code.
This can also be enabled programmatically with warnings.simplefilter('default', DeprecationWarning)
.
Cette année j'ai participé pour la première fois au défi trois fois forgé organisé par le site PtgPtb.fr.
Le principe ? Un défi d'écriture où chaque auteur participe successivement à la création de trois jeux de rôle (JdR).
Nous avons débuté en octobre : chaque participant a soumis une première forge …
Last month, I realized late that October was hacktoberfest month!
This online event is a month-long celebration (October 1-31) of open source software run in partnership with different software companies, with a focus on encouraging contributions to open source projects.
While I participated in the 2019 edition as a contributor …
fpdf2
is a minimalist PDF creation library for Python that I am maintaining.
With the release yesterday of its v2.4.0
, I'm going to present some of its notable new features since the latest minor version.
https://github.com/pyfpdf/fpdf2/
Doc: https://pyfpdf.github.io/fpdf2/
JPEG images …
Undying Dusk is a video game in a PDF format, with a gameplay based on exploration and logic puzzles, in the tradition of dungeon crawlers.
A curse set by the Empress keeps the world in an eternal dusk. You are have recently found shelter in an eerie monastery.
Featuring:
- ~ 200 …
Today, I am happy to announce version 2.3.0 of fpdf2, code name: Unbreakable!
https://github.com/pyfpdf/fpdf2/
Doc: https://pyfpdf.github.io/fpdf2/
Why Unbreakable?
- As a tribute to M. Night Shyamalan movie
- Because using
fpdf2
, your Python code can never break!
...
Just kidding, I would be …
fpdf2
, the library I mentioned in my previous post, cannot parse existing PDF files.
However, other Python libraries can be combined with fpdf2
in order to add new content to existing PDF files.
This page provides several examples of doing so using pdfrw
,
a great zero-dependency pure Python library dedicated …