v0
v0.10.2
Fixes
Fixed segfault when overwriting the pikepdf file that is currently open on Linux.
Fixed removal of an attribute metadata value when values were present on the same node.
v0.10.1
Fixes
Avoid canonical XML since it is apparently too strict for XMP.
v0.10.0
Fixes
Fixed several issues related to generating XMP metadata that passed veraPDF validation.
Fixed a random test suite failure for very large negative integers.
The lxml library is now required.
v0.9.2
Fixes
Added all of the commonly used XML namespaces to XMP metadata handling, so we are less likely to name something ‘ns1’, etc.
Skip a test that fails on Windows.
Fixed build errors in documentation.
v0.9.1
Fixes
Fix
Object.write()accepting positional arguments it wouldn’t useFix handling of XMP data with timezones (or missing timezone information) in a few cases
Fix generation of XMP with invalid XML characters if the invalid characters were inside a non-scalar object
v0.9.0
Updates
New API to access and edit PDF metadata and make consistent edits to the new and old style of PDF metadata.
32-bit binary wheels are now available for Windows
PDFs can now be saved in QPDF’s “qdf” mode
The Python package defusedxml is now required
The Python package python-xmp-toolkit and its dependency libexempi are suggested for testing, but not required
Fixes
Fixed handling of filenames that contain multibyte characters on non-UTF-8 systems
Breaking
The
Pdf.metadataproperty was removed, and replaced with the new metadata APIPdf.attach()has been removed, because the interface as implemented had no way to deal with existing attachments.
v0.3.7
Add API for inline images to unparse themselves
v0.3.6
Performance of reading files from memory improved to avoid unnecessary copies.
It is finally possible to use
for key in pdfobjto iterate contents of PDF Dictionary, Stream and Array objects. Generally these objects behave more like Python containers should now.Package API declared beta.
v0.3.5
Breaking
Pdf.save(...stream_data_mode=...)has been dropped in favor of the newercompress_streams=andstream_decode_levelparameters.
Fixes
A use-after-free memory error that caused occasional segfaults and “QPDFFakeName” errors when opening from stream objects has been resolved.
v0.3.4
Updates
pybind11 vendoring has ended now that v2.2.4 has been released
v0.3.3
Breaking
libqpdf 8.2.1 is now required
Updates
Improved support for working with JPEG2000 images in PDFs
Added progress callback for saving files,
Pdf.save(..., progress=)Updated pybind11 subtree
Fixes
del obj.AttributeNamewas not implemented. The attribute interface is now consistentDeleting named attributes now defers to the attribute dictionary for Stream objects, as get/set do
Fixed handling of JPEG2000 images where metadata must be retrieved from the file
v0.3.2
Updates
Added support for direct image extraction of CMYK and grayscale JPEGs, where previously only RGB (internally YUV) was supported
Array()now creates an empty array properlyThe syntax
Name.Foo in Dictionary(), e.g.Name.XObject in page.Resources, now works
v0.3.1
Breaking
pikepdf.opennow validates its keyword arguments properly, potentially breaking code that passed invalid argumentslibqpdf 8.1.0 is now required - libqpdf 8.1.0 API is now used for creating Unicode strings
If a non-existent file is opened with
pikepdf.open, aFileNotFoundErroris raised instead of a generic errorWe are now temporarily vendoring a copy of pybind11 since its main branch contains unreleased and important fixes for Python 3.7.
Updates
The syntax
Name.Thing(e.g.Name.DecodeParms) is now supported as equivalent toName('/Thing')and is the recommended way to refer names within a PDFNew API
Pdf.remove_unneeded_resources()which removes objects from each page’s resource dictionary that are not used in the page. This can be used to create smaller files.
Fixes
Fixed an error parsing inline images that have masks
Fixed several instances of catching C++ exceptions by value instead of by reference
v0.3.0
Breaking
Modified
Object.writemethod signature to requirefilteranddecode_parmsas keyword argumentsImplement automatic type conversion from the PDF Null type to
NoneRemoved
Object.unparse_resolvedin favor ofObject.unparse(resolved=True)libqpdf 8.0.2 is now required at minimum
Updates
Improved IPython/Jupyter interface to directly export temporary PDFs
Updated to qpdf 8.1.0 in wheels
Added Python 3.7 support for Windows
Added a number of missing options from QPDF to
Pdf.openandPdf.saveAdded ability to delete a slice of pages
Began using Jupyter notebooks for documentation
v0.2.2
Added Python 3.7 support to build and test (not yet available for Windows, due to lack of availability on Appveyor)
Removed setter API from
PdfImagebecause it never worked anywayImproved handling of
PdfImagewith trivial palettes
v0.2.1
Object.check_ownerrenamed toObject.is_owned_byObject.objgenandObject.get_object_idare now public functionsMajor internal reorganization with
pikepdf.modelsbecoming the submodule that holds support code to ease access to PDF objects as opposed to wrapping QPDF.
v0.2.0
Implemented automatic type conversion for
int,boolandDecimal, eliminating thepikepdf.{Integer,Boolean,Real}types. Removed a lot of associated numerical code.
Everything before v0.2.0 can be considered too old to document.