Download Latest Version v10.17.0 source code.zip (10.2 MB) Google Add to Preferred Sources
Home / v10.17.0
Name Modified Size InfoDownloads / Week
Parent folder
pikepdf-10.17.0-cp315-cp315t-macosx_15_0_arm64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.sigstore.json 2026-10-11 9.3 kB
pikepdf-10.17.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.sigstore.json 2026-10-11 9.1 kB
pikepdf-10.17.0-cp315-cp315t-musllinux_1_2_aarch64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp315-cp315t-musllinux_1_2_x86_64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp315-cp315t-win_amd64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp315-cp315t-win_arm64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0.tar.gz.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp314-abi3-win_amd64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp314-abi3-win_arm64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp314-cp314t-macosx_15_0_arm64.whl.sigstore.json 2026-10-11 9.1 kB
pikepdf-10.17.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.sigstore.json 2026-10-11 9.1 kB
pikepdf-10.17.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.sigstore.json 2026-10-11 9.3 kB
pikepdf-10.17.0-cp314-cp314t-musllinux_1_2_aarch64.whl.sigstore.json 2026-10-11 9.5 kB
pikepdf-10.17.0-cp314-cp314t-musllinux_1_2_x86_64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp314-cp314t-win_amd64.whl.sigstore.json 2026-10-11 9.1 kB
pikepdf-10.17.0-cp314-cp314t-win_arm64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp313-cp313-musllinux_1_2_aarch64.whl.sigstore.json 2026-10-11 9.1 kB
pikepdf-10.17.0-cp313-cp313-musllinux_1_2_x86_64.whl.sigstore.json 2026-10-11 9.3 kB
pikepdf-10.17.0-cp313-cp313-win_amd64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp313-cp313-win_arm64.whl.sigstore.json 2026-10-11 9.1 kB
pikepdf-10.17.0-cp314-abi3-macosx_15_0_arm64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp314-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp314-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp314-abi3-musllinux_1_2_aarch64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp314-abi3-musllinux_1_2_x86_64.whl.sigstore.json 2026-10-11 9.3 kB
pikepdf-10.17.0-cp311-cp311-win_amd64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp311-cp311-win_arm64.whl.sigstore.json 2026-10-11 9.5 kB
pikepdf-10.17.0-cp312-cp312-macosx_15_0_arm64.whl.sigstore.json 2026-10-11 9.3 kB
pikepdf-10.17.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.sigstore.json 2026-10-11 9.1 kB
pikepdf-10.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.sigstore.json 2026-10-11 9.3 kB
pikepdf-10.17.0-cp312-cp312-musllinux_1_2_aarch64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp312-cp312-musllinux_1_2_x86_64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp312-cp312-win_amd64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp312-cp312-win_arm64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp313-cp313-macosx_15_0_arm64.whl.sigstore.json 2026-10-11 9.3 kB
pikepdf-10.17.0-cp311-cp311-macosx_15_0_arm64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl.sigstore.json 2026-10-11 9.4 kB
pikepdf-10.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.sigstore.json 2026-10-11 9.0 kB
pikepdf-10.17.0-cp311-cp311-musllinux_1_2_aarch64.whl.sigstore.json 2026-10-11 9.2 kB
pikepdf-10.17.0-cp311-cp311-musllinux_1_2_x86_64.whl.sigstore.json 2026-10-11 9.3 kB
pikepdf-10.17.0-cp315-cp315t-musllinux_1_2_x86_64.whl 2026-10-11 4.3 MB
pikepdf-10.17.0-cp315-cp315t-win_amd64.whl 2026-10-11 4.0 MB
pikepdf-10.17.0-cp315-cp315t-win_arm64.whl 2026-10-11 4.5 MB
pikepdf-10.17.0.tar.gz 2026-10-11 10.0 MB
pikepdf-10.17.0-cp314-cp314t-win_arm64.whl 2026-10-11 4.5 MB
pikepdf-10.17.0-cp315-cp315t-macosx_15_0_arm64.whl 2026-10-11 2.1 MB
pikepdf-10.17.0-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl 2026-10-11 2.5 MB
pikepdf-10.17.0-cp315-cp315t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl 2026-10-11 2.7 MB
pikepdf-10.17.0-cp315-cp315t-musllinux_1_2_aarch64.whl 2026-10-11 4.1 MB
pikepdf-10.17.0-cp314-abi3-musllinux_1_2_x86_64.whl 2026-10-11 4.3 MB
pikepdf-10.17.0-cp314-abi3-win_amd64.whl 2026-10-11 3.9 MB
pikepdf-10.17.0-cp314-abi3-win_arm64.whl 2026-10-11 4.4 MB
pikepdf-10.17.0-cp314-cp314t-macosx_15_0_arm64.whl 2026-10-11 2.1 MB
pikepdf-10.17.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl 2026-10-11 2.5 MB
pikepdf-10.17.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl 2026-10-11 2.7 MB
pikepdf-10.17.0-cp314-cp314t-musllinux_1_2_aarch64.whl 2026-10-11 4.1 MB
pikepdf-10.17.0-cp314-cp314t-musllinux_1_2_x86_64.whl 2026-10-11 4.3 MB
pikepdf-10.17.0-cp314-cp314t-win_amd64.whl 2026-10-11 4.0 MB
pikepdf-10.17.0-cp313-cp313-musllinux_1_2_x86_64.whl 2026-10-11 4.3 MB
pikepdf-10.17.0-cp313-cp313-win_amd64.whl 2026-10-11 3.8 MB
pikepdf-10.17.0-cp313-cp313-win_arm64.whl 2026-10-11 4.3 MB
pikepdf-10.17.0-cp314-abi3-macosx_15_0_arm64.whl 2026-10-11 2.1 MB
pikepdf-10.17.0-cp314-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl 2026-10-11 2.4 MB
pikepdf-10.17.0-cp314-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl 2026-10-11 2.7 MB
pikepdf-10.17.0-cp314-abi3-musllinux_1_2_aarch64.whl 2026-10-11 4.1 MB
pikepdf-10.17.0-cp312-cp312-musllinux_1_2_aarch64.whl 2026-10-11 4.1 MB
pikepdf-10.17.0-cp312-cp312-musllinux_1_2_x86_64.whl 2026-10-11 4.3 MB
pikepdf-10.17.0-cp312-cp312-win_amd64.whl 2026-10-11 3.8 MB
pikepdf-10.17.0-cp312-cp312-win_arm64.whl 2026-10-11 4.3 MB
pikepdf-10.17.0-cp313-cp313-macosx_15_0_arm64.whl 2026-10-11 2.1 MB
pikepdf-10.17.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl 2026-10-11 2.5 MB
pikepdf-10.17.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl 2026-10-11 2.7 MB
pikepdf-10.17.0-cp313-cp313-musllinux_1_2_aarch64.whl 2026-10-11 4.1 MB
pikepdf-10.17.0-cp311-cp311-win_amd64.whl 2026-10-11 3.8 MB
pikepdf-10.17.0-cp311-cp311-win_arm64.whl 2026-10-11 4.3 MB
pikepdf-10.17.0-cp312-cp312-macosx_15_0_arm64.whl 2026-10-11 2.1 MB
pikepdf-10.17.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl 2026-10-11 2.5 MB
pikepdf-10.17.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl 2026-10-11 2.7 MB
pikepdf-10.17.0-cp311-cp311-macosx_15_0_arm64.whl 2026-10-11 2.1 MB
pikepdf-10.17.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl 2026-10-11 2.5 MB
pikepdf-10.17.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl 2026-10-11 2.7 MB
pikepdf-10.17.0-cp311-cp311-musllinux_1_2_aarch64.whl 2026-10-11 4.1 MB
pikepdf-10.17.0-cp311-cp311-musllinux_1_2_x86_64.whl 2026-10-11 4.3 MB
README.md 2026-10-11 5.8 kB
v10.17.0 source code.tar.gz 2026-10-11 10.0 MB
v10.17.0 source code.zip 2026-10-11 10.2 MB
Totals: 89 Items   173.9 MB 6
  • Added {class}pikepdf.ObjectSet, which records the objects that a walk of a PDF's object graph has already visited. Objects in a PDF are shared and may refer back to their ancestors, so a search that only limits its depth can take exponential time on quite ordinary files. ObjectSet.add() reports whether an object is new, and tells apart direct objects and objects of different Pdf, which a set of objgen cannot. See {ref}walking-object-graphs.
  • Added {meth}pikepdf.Object.is_same_object_as, which tests whether two references lead to the same object. Neither is, == nor comparing objgen answers this reliably.
  • Added {meth}pikepdf.Pdf.content_scopes and {meth}pikepdf.Page.content_scopes, which iterate over every content stream that pages can draw, each with the resource dictionary it uses: the page itself, form XObjects, annotation appearance streams, tiling patterns, Type 3 glyph procedures and soft masks, however they are nested or shared. This is the way to find every font, image or colour space a document uses. Each {class}pikepdf.ContentScope is reported once for the document; pages= selects pages and kinds= selects what is reported.
  • Added {meth}pikepdf.Page.get_resources, which returns the resources of a page or form XObject for reading. Unlike {attr}pikepdf.Page.resources, it finds resources inherited from the page tree, does not create an empty dictionary when there are none, and returns None instead of raising when /Resources is malformed.
  • Fixed comparing two objects with == taking exponential time when the objects being compared share children, such as the same file opened twice. Each pair of objects is now compared once.
  • Fixed {meth}pikepdf.Pdf.add_pages_from hanging on a page with an action whose /Next actions are shared or form a loop.
  • Fixed {meth}pikepdf.Pdf.open_outline reading only the first item at each level of an outline whose items are direct objects. Such items are now made indirect when the outline is saved, as the PDF specification requires.
  • Reading a stream that will not decode now raises {exc}~pikepdf.exceptions.DataDecodingError with the reason, whether the stream's data was read from a file or set from memory. Previously a stream read from a file raised a {exc}~pikepdf.exceptions.PdfError that said only "read_bytes called on unfilterable stream", and the reason was available only from {meth}pikepdf.Pdf.get_warnings. DataDecodingError is a PdfError, so existing handlers are unaffected. {issue}182
  • An exception raised by a JBIG2 decoder now reaches the caller of {meth}pikepdf.PdfImage.as_pil_image, {meth}pikepdf.PdfImage.extract_to and {meth}pikepdf.PdfImage.read_bytes unchanged, with its own type, message and traceback. Previously, for an image read from a file, it was replaced by a generic DataDecodingError or PdfError. {issue}182
  • Added {exc}~pikepdf.exceptions.QpdfRuntimeError, raised for errors from qpdf that pikepdf has no more specific exception for. These were previously raised as a bare RuntimeError, which except pikepdf.PikepdfError did not catch. The new exception derives from both {exc}~pikepdf.exceptions.PikepdfError and RuntimeError, so handlers written for RuntimeError still work. {issue}240
  • The empty name / is now supported. The PDF 1.7 and 2.0 specifications define a lone slash as a valid name made of zero characters, but pikepdf.Name('/') raised ValueError, and dictionaries refused / as a key. This broke {meth}pikepdf.Pdf.add_pages_from on files with an empty-named destination such as /Dests << / 3 0 R >>. Such names can now be created, used as dictionary keys, and migrated during page copying. bool(Name('/')) is False, like an empty {class}pikepdf.String. Name(''), which lacks the leading slash, is still rejected. PDF/A does not forbid empty names, and the PDF/A validator accepts them. Thanks to @sjudd for the report and @DSeaStar for the analysis. {issue}745
  • AcroFormField.get_inheritable_field_value_as_name() now returns a {class}pikepdf.Name, as documented, instead of a str. When the value is missing or not a name, it returns the empty name Name('/'), which is falsy, instead of ''. Comparisons such as == '/Tx' are unaffected. {issue}748
  • Fixed an out-of-bounds read when opening a PDF from a Python file object whose readinto() reports more bytes than were requested. This now raises ValueError, as writing to such a stream already did. Non-blocking streams, whose readinto() returns None, now raise ValueError instead of hanging. Thanks to @Nayana-Naik73. {issue}747
  • Fixed building from source on PyPy, which failed to compile since v10.0. PyPy now reads Python file objects through readinto(), like CPython, instead of copying the result of read().
  • {func}pikepdf.open reads directly from the file descriptor when given a filename, instead of calling the seek() and readinto() methods of a Python file object for every read. Opening and reading a large file with many objects is about four to five times faster, matching the speed of memory mapping (access_mode=AccessMode.mmap). Streams passed to {func}pikepdf.open, including plain file objects, are read through their methods as before.
  • Documented {class}pikepdf.TokenFilter with worked examples that shorten numbers and convert RGB colors to grayscale, and explained when to use a token filter instead of {func}pikepdf.parse_content_stream. The API reference no longer says that the parser should not be used to edit content streams. The TokenFilter.handle_token documentation now says correctly that exceptions it raises propagate to the caller. {issue}62
Source: README.md, updated 2026-10-11