• Made treatment of CCITT image photometry ignore BlackIs1, since this seems more consistent with other programs.


  • Improved support for extracting the contents of inline images.

  • Marked some “always should have been private” functions as deprecated with removal planned for v6, mainly in pikepdf.models.image.

  • Fixed all Python documentation style inconsistencies.


  • Fixed undefined behavior on creating NameTree on direct object. Thanks @willangley.

  • Fixed sdist with coverage build.

  • Added support for specifying QPDF’s library build directory, for compatibility with QPDF’s transition to cmake.

  • QPDF_* environment variables will modify build paths even when CFLAGS is defined.

  • Fixed rare case where GIL was not held while discarding a certain exception.

  • Now using cibuildwheel 2.9.0.

  • Many typo fixes. Thanks @PabloAlexis611.


  • Fixed Pages.__eq__ not returning NotImplemented when it ought to.

  • Fixed possible problems with NameTree and NumberTree.__eq__ operators.

  • Changed to SPDX license headers throughout.


  • Chores. Fixed ReadTheDocs build, updated versions, fixed a test warning, improved coverage, modernized type annotations.


  • New feature: pikepdf.Job bindings to QPDFJob API.

  • New feature: pikepdf.NumberTree to support manipulation of number trees, mainly for applying custom page labels.

  • Many improvements to pikepdf.NameTree including the ability to instantiate a new name tree.

  • Several memory leaks were fixed.

  • Rebuilt against pybind11 2.10.0.


  • Build system requires changed to setuptools-scm 7.0.5, which includes a fix to an issue where pikepdf source distribution reported a version of “0.0” when installed.


  • Fixed issue with parsing inline images, causing loss of data after inline images were encountered in a content stream. The issue only affects content streams parsed with parse_content_stream; saved PDFs were not affected. #299

  • Build system requires changed to setuptools-scm 7.0.3, and setuptools-scm-git-archive is now longer required.


  • Binary wheels for Linux aarch64 are now being rolled automatically. 🎉

  • Refactor JBIG2 handling to make JBIG2 decoders more testable and pluggable.

  • Fixed some typing issues around ObjectHelper.

  • Exposed some pikepdf settings that were attached to the private _qpdf module in a new pikepdf.settings module.


  • Avoid a few versions of setuptools_scm that were found to cause build issues. #359

  • Improved an unhelpful error message when attemping to save a file with invalid encryption settings. #341

  • Added a workaround for XMP metadata blocks that are missing the expected namespace tag. #349

  • Minor improvements to code coverage, type checking, and removed some deprecated private methods.


  • Fixed removal of necessary package packaging. Needed for import.


  • Reorganized release notes so they are better presented in Sphinx documentation.

  • Remove all upper bound version constraints.

  • Replace documentation package sphinx-panels with sphinx-design. Downstream maintainers will need to adjust this in documentation.

  • Removed use of deprecated pkg_resources and replaced with importlib (and, where necessary for backward compatibility, importlib_metadata).

  • Fixed some broken links in the documentation and READMEs.


  • Fixed issue with saving files that contained JBIG2 images with null DecodeParms. #317

  • Use cibuildwheel 2.4.0 and update settings to publish PyPy 3.8 binary wheels for manylinux platforms.


  • Fixed test suite failures with Pillow 9.1.0. #328


  • Fixes to pyproject.toml to support PEP-621 changes. #323

  • Fixed assuming Homebrew was present on certain macOS systems; and more generally, turn off setup shims when it seems like a maintainer is involved. #322


  • Rebuild against QPDF 10.6.3.

  • Improvements to Makefile for Apple Silicon wheels.


  • Fixed issue where Pdf.check() would report a failure if JBIG2 decoder was not installed and the PDF contains JBIG2 content.


  • Some errors and inconsistencies are in the “pdfdoc” encoding provided by pikepdf have been corrected, in conjunction with fixes in libqpdf.

  • libqpdf 10.6.2 is required.

  • Previously, looking up the number of a page, given the page, required a linear search of all pages. We now use a newer QPDF API that allows quicker lookups.