[2.8.9] - 2026-09-29
Added
alignparameter forFPDF.alias_nb_pages()to control horizontal alignment (Align.L,Align.C,Align.R) of substitution text inside reserved alias space - cf. issue #1926 - thanks to @prateek-dagar- support for page number alias substitution with bidirectional / RTL text shaping - cf. issue #1925 - thanks to @prateek-dagar
appearanceparameter forFPDF.file_attachment_annotation(), acceptingFileAttachmentAppearance.HIDDENto give the annotation an empty appearance stream so its default icon is not displayed while the file stays embedded and reachable - cf. issue #561 - thanks to @ChrisJr404- Turkish translation of the Tuto 7 - Creating PDF/A Documents tutorial section, along with fixes for duplicated clauses and mistranslations in the Tuto 2, 4 & 6 descriptions - cf. PR #1951 - thanks to @ihsandeniz
Fixed
- escaped Markdown markers adjacent to emphasis markers in link labels no longer lose literal characters or apply unintended styling
- PDF serialization of boolean and null values: booleans in arrays and dictionaries now use lowercase
trueandfalse, including in mixed numeric/boolean arrays;Nonein arrays is serialized asnull; and filtering empty dictionary fields preservesFalseand numeric zero values - thanks to @agustin18 - SVG percentage
widthandheightvalues with surrounding whitespace (e.g.width="100% ") no longer raiseValueError- thanks to @Anai-Guo - PDF/A-1 documents using TrueType or CFF-based CID fonts now include a
/CIDSetstream in each font descriptor, as required by ISO 19005-1 (veraPDF rule 6.3.5-3) - cf. issue #88 - split font
/ToUnicodeand/EncodingCMap mappings into blocks of at most 100 entries, as required by the PDF specification - cf. issue #1952 - visual gap in rendering subsequent text after
{nb}page alias when text shaping is enabled - cf. issue #1090 - thanks to @prateek-dagar FPDF.write_html()no longer raisesIndexError: pop from empty listwhen a<ul>or<ol>element carries aline-heightthat is not a bare number (e.g.line-height: normalorline-height: 1.5em); such values are now ignored, and the default line height is used, consistently with<p line-height="x">- thanks to @Anai-GuoFPDF.write_html()now renders list bullets with correct font styling instead of inheriting preceding heading (e.g.<h1>) styles - cf. issue #1921 - thanks to @prateek-dagar- table cells landing in the wrong column when a row was covered by several rowspans that did not start in column order - cf. issue #1948
Padding.new()now accepts 1-element sequences per CSS shorthand rules and preserves existingPaddinginstances without redundant allocations
Changed
- Refactored
_tt_font_widthsto reuse_cid_font_widthsglyph interval compression logic - thanks to @agustin18