v9.5.1
Bump version to address sigstore build issues.
Pillow dropped PyPy 3.9 so we’re dropping it too.
v9.5.0
Created setter for Outline management to make manipulating outlines easier. Thanks @Zhongheng-Cheng for this contribution. #636
pikepdf now sets XMP properties as subelements instead of inline properties, in line with the XMP specification. Thanks @federicobond. #628
pikepdf an issue with converting certain images to PIL. Thanks @DaveDeCaprio. #632
Added a new
pikepdf.exceptions
module which organizes all exceptions more conveniently.pikepdf now tries harder to extract corrupt images in a PDF when they are found.
Fixed an issue where an exception handler referred to an object not in scope, causing another exception. Thanks @dhazelett. #627
Dropped a comment about an unsupported dependency.
v9.4.2
Internal type assertion error messages from qpdf that previously triggered a RuntimeError will now raise a PdfError. Generally these errors only occur in corrupted files.
When we are updating XMP in the processing of saving, errors from updating XML are wrapped differently to clarify the context in which the error occurs.
v9.4.1
Fixed a process abort in JBIG2 handling related to cleanup of Python objects owned by C++ code.
Fixed inconsistent behavior when setting metadata records to an empty value. #622
v9.4.0
Added missing Python 3.13 wheels for a few platforms that were missing them, mainly ARM Linux, musllinux/Alpine, and Windows.
Since Homebrew has ended support for macOS 12, macOS 13 is now the minimum requirement for Intel macOS.
Suppressed some spurious warnings during build tests.
v9.3.0
Integrated OSS Fuzz.
Prevented generation of PDF date strings with invalid trailing apostrophes, while still accepting them.
Improved error message on parsing invalid date strings.
Dropped support for Python 3.8 (end of life October 2024).
v9.2.1
Fixed some inconsistencies with the pikepdf.Rectangle class. #605
Python 3.13 with free-threading added to test matrix.
Removed wheel package as build requirement since modern packing no longer needs it.
v9.2.0
Updated C++/Python exception translation to new pybind11 2.12.0+ protocol, fixing possible undefined behavior in multithreaded applications.
pybind11 2.12.0 is now required.
qpdf 11.9.1 is now used to build wheels.
Modernized copyright information to REUSE.toml specification.
Added a new test file for a rare case, CCITT with EndOfLine=True. Thanks @ekordas. #602, #601
v9.1.2
v9.1.1
Fixed an issue where small floating point values would be recorded in scientific notation, contrary to the PDF specification. #598
Fixed some false positive warnings on Windows C++ compilers.
Improved support for Python 3.13 pre-release.
v9.1.0
Fixed a potential resource leak if we opened a file to read it as a PDF but it was not a valid PDF.
When overwriting an existing PDF with
Pdf.save()
, pikepdf now attempts to retain the original file permissions and ownership.Fixed missing return type for PageList.Extend. #592
Fixed exception if
jbig2dec --version
exists but valids to return a version number.Fixed tests on Python 3.13 pre-release. Thanks @QuLogic.
Changed all references of “QPDF” to “qpdf”, its new spelling. Thanks @m-holger.
v9.0.0
Removed deprecated pikepdf.PdfMatrix. Use pikepdf.Matrix instead.
Removed deprecated pikepdf._qpdf submodule.
Pdf.pages no longer coerces PDF dictionaries to page objects. You must explicitly insert/add pikepdf.Page objects.
pikepdf.Object.parse() no longer accepts string input; only bytes are allowed.
macOS 12 is our minimum supported version for x86_64, and macos 14 is our minimum supported version for ARM64/Apple Silicon. v8 accidentally ended support for older versions at some point - this change is formalizing that. Efforts were made to continue support for older verions, but it is not sustainable.
We now generate binary wheels for musllinux-aarch64 (Alpine ARM64).