NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #427 most downloaded on PyPI
Python bindings to PDFium
Last release 1 months ago
13 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
3 versions withdrawn
withdrawn after publishing
5 years old
129 releases · first in 2021
One column per quarter.
The previous rendering functions (render_topil() render_tobytes(), ...) are still around as aliases but might be deprecated eventually.
Support model
API-breaking changes
OutlineItem.page_index is now None rather than -1, to avoid accidental reverse list indexing and to enforce that callers properly handle this case. Moreover, OutlineItem.is_closed is now None rather than False if the bookmark has no kids.PdfPageObject.get_type() was replaced with a type attribute.PdfPage.count_objects() was removed. Use PdfPage.get_objects() or the raw PDFium API instead.PdfDocument.new_page(), it is now interpreted in reversed direction, rather than inserting at the beginning.PdfPage.render_base() now directly returns a ctypes ubyte array; BitmapDataHolder has been removed.annotations was renamed to draw_annotscolour was renamed to fill_colour and now only takes a list of 4 values for simplicity - it may not be 3 values or None anymoreno_antialias has been replaced with separate boolean options no_smoothtext, no_smoothimage, and no_smoothpathOther changes
OutlineItem now contains information on the number of sub-items (n_kids attribute).PdfDocument.get_page_size() to retrieve page size by index without needing to load a PdfPage (uses FPDF_GetPageSizeByIndexF() under the hood).colour_scheme, fill_to_stroke, force_halftone, draw_forms, rev_byteorder, prefer_bgrx, force_bitmap_format, extra_flags, allocator, and memory_limit.render_to() functions to PdfPage and PdfDocument that take a custom bitmap converter, to transform the ctypes array to a different object. A set of built-in converters is provided with the BitmapConv class. Confer the updated API documentation for details. The previous rendering functions (render_topil() render_tobytes(), ...) are still around as aliases but might be deprecated eventually.numpy_ndarray added.pil_image rendering target now accepts a prefer_la parameter to request automatic conversion of BGRA/RGBA to LA if rendering in greyscale mode with alpha channel.PdfPage.get_objects() can now recursively descend into Form XObjects.Setup code
$PYP_TARGET_PLATFORM was renamed to $PDFIUM_BINARY, the value sdist was renamed to none.purelib folder. Some systems use this information to separate platform-dependent packages from pure-python packages (i. e. /usr/lib64 instead of /usr/lib). Confer PEP 427.version.py and the actual version of the used binary. The update and build scripts do not directly change the main version file anymore, but defer the changes to setup.py..lock_autoupdate.txt in data/.MANIFEST.in file was added to avoid being dependent on setuptools_scm.Documentation
README.md. Added more support model examples and an extensive guide regarding the raw PDFium/ctypes API.<details> <summary>pypdfium2 commit log</summary>
Commits between 2.11.0 and 3.0.0b1 (latest commit first):
03b379f [autorelease] update changelog and version file75b972c update_pdfium: make max_workers configurable69a0b77 autorelease: nevermind, always include the log76fc08e Finalise changelog_staging21dc9b0 Misc improvementsb02b67b workflow: re-activate schedule0378257 Slightly improve converter docs6a24cc4 Revert "textpage: replace count_chars() with char_count attribute"7f2e9ff Update some docs18221b4 readme: suggest using get_functype()1b8d7f1 tocprinter: avoid some variable assignmentsff52551 Update tasks6d00654 Make most of _utils.py public2c82267 readme: fix use of non-public membercc70047 utils: rename bg_colour to fill_colourd960830 Rename back from color to colour69c780f rendering: rework colour integration26bf175 textpage: replace count_chars() with char_count attribute038feb2 Improve string decoding6b14960 docs: decide not to deprecate render_to* methods just yet97d2243 Update rendering CLIfc736ec auto_bitmap_format(): flatten if/else treec44d81a multipage renderer: add missing close() callsf8608e8 Set OutlineItem.is_closed to None if it has no kids1f2b75b toc/OutlineItem: Add n_kids attribute1093579 Provide means to plug in custom converters (#140)e513026 render_topil: use frombuffer() rather than frombytes()d17cffd autorelease: make commit log collapsible9d4a3fc autorelease: allow skipping commit log3df1533 autorelease: improve changelog handling for beta release101ca5e document: add page index validation for rendering05d7549 docs: better integrate new allocator parameter013917c render_page: always fill the bitmap580e1e1 page/render_base: accept a caller-provided allocator1b9643f readme/development: add taskse953d7c Merge pull request #139 from pypdfium2-team/readmee9cc218 Add initial development section5774cfd correct docs for PdfPage.get_objects()06543ab changelog: note removal of PdfPage.count_objects()20413eb docs: improve attribute documentationd81ac2c docs: update index.rst03d1bde Merge pull request #138 from pypdfium2-team/setupinfra0049bfb Readme: use named footnoteseff97a1 check_deps: just check for missing commandsaa7e7c6 fix excessive whitespace9de1236 update build.shafbc0d7 update changelog/tasks8d31b6a update manifest/setup.cfg66453fe update changelogd2cfcc9 improve pageobjects testing3f03597 PdfPage.get_objects(): lower default depth to 2628b4c3 toc: adjust code to match pattern of PdfPage.get_objects()dac4d6c pageobjects: descend into form objectsadb4294 Remove presetup_done legacy3344ee8 Rid project of setuptools_scm dependencyd676833 Do a beta update anyway60df3a8 check_deps: raise exception instead of implicit installcc2e4e9 skip unnecessary version changesbbede3b readme: normalise footnotes76e1c0d setup.py: fix oversightdc224a1 Update readme62367d1 Slightly simplify some setup code4d564ff Rename craft_packages to craft_wheels05d5fb0 Update tasks69bccf0 readme: extend In Use section4060b73 Decide we don't want a beta releasee06048b Start editing the Readme73cbfa4 Add a few code comments5849e09 Update changelog and tasks8bf49c4 Check in first attempt for version status files98815b8 Autorelease: r/w version file only once53cdcbb Void version test codee5ed0ba Start writing version status filesa472366 declare extension module differentlyd51ccf9 Make clean_artefacts() nicer4c8b832 preparations for separate version status filesc4014a1 Update readme/changelogfd019ba craft_packages: restore in-tree artefacts from editable install6fd99e7 rename a parameter of call_ctypesgen()053fa9f Improve libnames logic8687c37 Move away from dependency pinning anyway5c53604 Harden copy_platfiles()79d51d8 Start setup work337f1ee Update tasks253df27 Fix using similar word with wrong meaning34b03de Add inline tasks51929e7 Correct wrong docstring455e556 Update rendering CLI41a0b1a update_pdfium: preparations for calling ctypesgen only once2e49825 update_pdfium: by default, abort in case of missing binariesddda5da update_pdfium: accept auto for current host platformaf8e48c Move some components from packaging_base to setup_base5aeda24 update tasksb772b7c Page-related improvements626d59c Change pattern of optional imports4b675eb readme: update toc example8956e70 Update changelog4cd7d4c Add proper color validationac68204 Finish struct fields topicf921025 readme[in use]: add Arabic-OCR52f0fef Don't pass through git/ctypesgen executables6a6c7a9 readme: add missing word8a93813 autorelease: handle existing beta tags correctly6e46a22 Update tasks6bbcc90 Add tasks concerning uninitialized struct fields6ee94e9 Remove superfluous empty line03c50be Minor doc improvementsd7bd975 Use FPDF_InitLibrary() anyway030bd72 Fix some documentation oversights92cd1c8 readme: minor improvements again5f18040 Construct numpy arrays differently (#133)ef1f2ad Prefer explicit encoding of strings56524ec readme: slightly improve a phrase4cded8c Further Readme improvements (#132)1d9825f readme: remove form rendering from examplee9adc16 wheel tags: adjust minimum required macOS version0d6f2e9 Reformat changelog_stagingd8c7ef3 docs: improve warning regarding thread unsafety0eac03f Update changelogf44b6ad exit_formenv: stylistic swap853eb78 rendering: add test case20a436a Create a separate exit_formenv() method3500197 Move form environment from page rendering to document level (#130)36c95aa CLI: minor style improvements30d1222 font: hold reference to pdf015cb2f Fix another init inconsistency2f212c2 Fix typo and update .reuse/dep552e7ee3 Improve consistency of helper class init894d555 PdfPageObject: hold a reference to the corresponding pageff470b4 Slightly improve forminfo creation33f7966 Initialise form environment differently1cef257 Add documentation for public attributes5dec9ba Remove internal aliases for underlying pdfium objects48f875a rendering: order parametersb49681e ColorScheme: add docs0096ab8 Improvements for rendering with custom colour scheme (#126)4745916 rendering/colourscheme: add task6ee94d4 Adapt rendering clib8dc7c6 Experimental rendering with custom colour scheme6d81f57 PdfDocument.save(): declare interface versionacb1508 Split up colour functions as planned69e5494 update tasks9970e58 utils: add task25a0e2e Update changelog13d31f8 minor style improvements88010bb Add further numpy rendering test case7c4285c Add methods for rendering to numpy arrays0f6f3cc page/renderers: take only keyword argumentsbd869c5 Fix typosd36aef6 readme: update rendering example5d858f2 Restructure page rendering and related utilities (#125)451f275 HostPlatform: rename platform attribute to plat_info3de1e8e Implement no_antialias rendering param differently2583618 OutlineItem: improve docs for page_index265ebe9 document: add info about exceptionsd44bf55 Internalise raise_error() code into opener as plannedd59bd3b Update changelog_stagingd59ad6e Implement planned PdfDocument.get_toc() changec1b3409 Change typing.Optional[type] to type | None in docstrings1056e79 Decide that the next release will increment major versionb4662fd HostPlatform: add defaults for libc / is_glibc2a3eb38 setup.py: slightly rearrange a code passage9cfaab9 autorelease: check for pypdfium2 code updates1414ff7 Fix reuse compliance973efe7 Continue addressing setup code tasks7d5cd9c Update changelog6652365 Rewrite setup.py and move HostPlatform into packaging_base1eadf49 Add inline tasksbf06496 Pass through ctypesgen executable as well46c1f97 Rearrange some setup code61e070a Update changeloge18de79 workflow: stop passing removed flag to autorelease72a74c7 Add .git suffix to depot_tools URL367b55e Render with external buffer and remove BitmapDataHolderb42b5a4 update tasks682557b readme: add another project that uses pypdfium2ec2dc82 craft_packages: add another taske22aaaa autorelease: slightly improve import styleb61c2d0 install newer version of wheel anywayad1fd00 craft_packages: turn comment into taskdfc40bc autorelease: always do a new clone of pdfium7ca6c8c update_pdfium: add taskfba8b43 autorelease: further improve log3a2524f autorelease: only add PDFium log if V_LIBPDFIUM is actually updatedfeceeb1 readme: swap two examples0d0f689 readme: slightly improve wordingc964276 autorelease: add pdfium commit log2a61322 autorelease: rename some variables2d1bf27 autorelease/workflow: only push after successful wheel building4a1294a Rework dependency pinning8b41759 Apply suggestions from previous commit6907ddf Rewrite README.md and improve code quality on the way (#122)</details>
<details> <summary>PDFium commit log</summary>
Commits between 5254 and 5316 (latest commit first):
2ed2550ad Create testing command line helpers1279e11ea Provide an escape hatch for structs in Data Partition5ccd10bce Change CPDF_TextPage::m_CharIndices to be a struct.7a92ada7c Remove dead code in CPDF_TextPage::Init().623ac7b75 Refactor remaining test for runtime renderer selection91e2a1466 Add a flag for selecting renderer at runtimed9ccef469 Store retained object keys in all CPDF_DocPageData maps.2c1b81c30 Return retained refs from CPDF_IndirectObjectHolder::NewIndirect<T>().7037a48eb Remove assignment to RetainPtr<T> from raw T* types.36421c60d Store retained streams in CPDF_DocPageData::m_FontFileMap.495f91ded Use FixedUninitDataVectors in CPDF_TransferFunc.a73aa34df Roll v8/ 278633dc7..340416187 (254 commits)5313f926c Return retained references from CPDF_Dictionary::GetDictFor().bd8a0e475 [Skia] Fix the issue that some images are not rendered smoothc84dc1f9e Return retained references from CPDF_Dictionary::GetArrayFor().d20b2f05f Add missing bounds check in FPDFFont_GetGlyphPath().55c78b079 Re-introduce CPDF_{Array,Dictionary}::GetStringAt().3f90d431a Return retained references from CPDF_Dictionary::GetObjectFor()1219d0acc Allow implicit convestion from FixedUninitDataVector<> to span<>89b87842c Shuffle for-loop in CPDF_DocRenderData::CreateTransferFunc().28906822d Rename variables in CPDF_Parser::ParseAndAppendCrossRefSubsectionData().0f304633b Add IFX_WriteStream::WriteSpan().0e723c531 Explicitly allow IFX_WriteStream::WriteBlock() calls with size of 0.908d34cfe Test RetainPtr with pdfium::Contains().c79ca1311 Reduce some ref-churn when using CPDF_References.d8ede5f8d Align fax encoder interface with JPEG encoder interface.a416d84ee Return retained objects from CPDF_Object::GetDict()30031534c De-virtualize CPDF_IndirectObjectHolder::GetOrParseIndirectObject().bd17761f7 Re-work string template constructorsf929f2ffb Add FPDFAnnot_GetFormAdditionalActionJavaScript() API8e1d839bc Reland "Use DataVector in CFX_MemoryStream."a52ea7f7b Copy data in CPDF_SyntaxParser::ReadStream().e4022a837 Add a test case for CFX_MemoryStream::{Read,Write}BlockAtOffset().e10b8b664 DEPS-in PartitionAlloc to PDFium3c226cd17 Remove dead code in CFX_FileBufferArchive.be937bf25 Replace Vector2D with Fx2DSizeOrDie().d89483740 Use FixedUninitDataVector in CFX_FontMapper and CFX_FontMgr.45d721018 Add a FixedUninitDataVector container.e44f16772 Fill in runtime renderer checke6e3ca05a [skia] Clean up empty skopts variablesf41b8f6e9 [Skia] Remove mask_array.pdf from the suppression list937972960 Use CFX_DIBBase::GetPitch() in CFX_PSRenderer.569024734 Rename CPDF_Array::GetStringAt() to GetByteStringAt()27151a6c7 Rename CPDF_Dictionary::GetStringFor() to GetByteStringFor()ae8ba7e15 Revert Array/Dictionary locker Get*() methodsbd9316553 Convert some CPDF_ExpIntFunc getters to return spans.23705d987 Make CPDF_StreamAcc take retained arguments.99e6ab14e Add additional dictionary locker methods.4df8e905e Prefer fabsf() over static_cast<float>(fabs()).e5a22f326 Move the Skia-only code into a separate functione50f95a3c Move a condition check in CStretchEngine to a static functiondd063d0eb Reduce copying in fxbarcode.f01189dad Improve fxbarcode matrix classes.f5406e512 Add a regression test case to StreamAccTest.f979a14da Add a WriteRect() helper to cpdf_contentstream_write_utils.h.07ef29a27 Add a libcxx_revision presubmit check.3f42f8180 Revert "Use DataVector in CFX_FontMapper and CFX_FontMgr."6cc858e62 Revert "Use DataVector in CFX_MemoryStream."638c69c8f Fix member destruction order in CPDF_StreamAcc.652d35bec Return retained object from CPDF_Dictionary::GetStreamFor().3f3305e25 Add a pixel test for incorrect text rendering on macOS.1ec9e6865 Add CPDF_Array::GetNumberAt() helper method3b886ba98 Rename CPDF_Array::GetNumberAt() to GetFloatAt().27bb94d6b Add CPDF_Dictionary::GetNumberFor() helper methodda4072305 Rename CPDF_Dictionary::GetNumberFor() to GetFloatFor().c844131cb Roll buildtools and libc++0ceda736b Use CPDF_DictionaryLocker in CPDF_GenerateAPd985207ec Make Dictionary and Array lockers more useful4f8b26512 Support runtime renderer selection in CFDETextOutLargeBitmapTest.8bdbd2c58 Roll third_party/freetype/src/ 1a242558b..8e68439a6 (41 commits)612da3fdd Roll tools/clang, build, buildtools and libc++a015667fd Use DataVector in CFX_MemoryStream.530f0500f Use DataVector in CFX_FontMapper and CFX_FontMgr.f00bbebca Roll v8/ 709443dcb..278633dc7 (599 commits)a60b5c53b Use spans in BasicModule::A85Encode().72389a3b6 Use spans in BasicModule::RunLengthEncode().e0dcb6bcd Return retained reference from CPDF_Dictionary::GetDirectObjectFor().c43b78543 Return const pointer from CPDF_Stream::GetInMemoryRawData().d9dbe513f Use more spans inside FaxModule.d8db3048d Convert BinaryBuffer to store a DataVector.067421809 Change FaxModule::FaxEncode() to use DataVector.b39d4807a Convert BasicModule::A85Encode() to use DataVector.cf28202ba Return even more retained objects from CPDF_Array getters.24c54b653 Avoid a potential copy in CPDF_ObjectStream.219be71e2 Use DataVector in CPDF_FlateEncoder.c14b89a8d Return more retained objects from CPDF_Array getters.085c2632b Make size types more consistent within FlateModule.105670a2f Avoid null-deref in CJX_Node::model.8fcb85579 Ensure FxAllocAllocator<> only allocates ordinary data.e3e7fc0d4 Return retained objects from indirect object holder, part 3.c3ff4188b Pass more retained references into CPDF_ObjectWalker.65f7bed26 Return retained results from CPDF_ObjectWalker::GetNext()ad039f8a5 Roll Catapult from 1c7fc8f4bdb8 to 7ee071132a53 (32 revisions)ad110e56b Roll Code Coverage from cd81494a2f49 to 06c29fb95a45 (2 revisions)524e53d7c [Skia] Set the correct group knockout status for fill-and-stroke paths3a5aefe1c De-virtualize CPDF_Object::Is*() methods274fce6e8 Make CPDF_StreamAcc::GetData() private.c8fb3fb87 Return const pointer from CPDF_StreamAcc::GetData().8c0b6c1c0 De-virtualize const forms of CPDF_Object::As*()d6daaedda Split CPDF_Object::As*() into mutable and non-mutable varieties.a02e22a45 Remove non-const version of CPDF_StreamAcc::GetSpan().6c2c66b17 Return retained objects from indirect object holder, part 2.70df5d0cc Return retained objects from the indirect object holder, part 1.8ef3b24ed Document a FPDFDOC_InitFormFillEnvironment() lifetime requirement.a02871ee4 Remove references to empty Skia files29fdb775d Roll buildtools/third_party/libc++/trunk/ 88bf40704..84f06932d (228 commits)c1997e165 Return CPDF_Reference from CPDF_Object::MakeReference()a2ea597e7 Avoid ambiguity in RetainPtr<> constructors779b542c6 Keep track of objects in name tree traversals.6a3f7ed9e Improve first page object number validation in a linearized header.2f9d9ed70 Roll buildtools, libc++ and abseil-cpp.cf5411ae3 Remove mutability from CPDF_FileSpecab8c6ce15 Update gn_version to 00b741b1568d56cf4e117dcb9f70cd42653b4c78b01ac3667 Roll buildtools/third_party/libc++/trunk/ b1269813e..b1d4c7dbe (64 commits)01a7dfe21 Roll build/ 26f8da347..918b804ee (140 commits; 1 trivial rolls)435a50873 Remove unused non-const form of CPDF_Object::SafeGetDirect()3ea81de1d Add two more RetainPtr tests.fffda1d36 Avoid ref-churn when move conversion constructing RetainPtrsb14660cb0 Roll third_party/abseil-cpp/ 62a4d6866..fd07f9469 (4 commits)cd807b610 Roll tools/clang/ c8f1e5e5b..3d8d88e8b (4 commits)d51720c9b Return retained const objects from SearchNameNodeByNameInternal()fbf605544 Roll third_party/freetype/src/ 2db58e061..1a242558b (8 commits)48c2e6905 Add new kConstants for form controls81ab3354f Enforce maximum legal object number during linearized parses.39da1f7a1 Roll buildtools/third_party/libunwind/trunk/ 012c3438e..42aa6de55 (10 commits)fe847b545 Roll Fuchsia SDK from 9.20220729.1.1 to 9.20220830.0.1.e8977dea9 Roll buildtools/third_party/libc++abi/trunk/ 039323b94..48afced8a (6 commits)589de03fe Roll third_party/depot_tools/ 5fb99f65c..3528d4d3c (47 commits; 5 trivial rolls)bc09eb274 Roll base/trace_event/common/ d115b033c..640fc6dc8 (3 commits)fc2a16f18 Roll third_party/zlib/ c4e126880..926ac230d (2 commits)6a0caf018 Roll third_party/skia/ 3605b5fd7..73fb58ce0 (544 commits)46b0bfdea Roll tools/memory/ 41d69d665..e5f1a8a76 (2 commits)ff6bd1821 Roll third_party/icu/ 50ec7b382..bbdc7d893 (4 commits)47a82db41 Pass spans to CFX_FloatRect::GetBBox()551eb6914 Avoid pointer arithmetic in CFX_FileBufferArchive5e49f9ccc Add runtime renderer checksef3036859 Refactor embeddertest constants for runtime renderer selection340bbcf10 Fix a malloc size error in OpenJPEG.8479a083a Fix bad probe on span assignment operator.c9c2180c8 Avoid pointer arithmetic in cpdf_streamparser.cpp7fa683297 Use spans in place of pointers in fx_font.cppc3451daff Give PDFium's top-level build a "default" groupf75272cce Refactor fpdf_view_embeddertest for runtime renderer selectionef51a2d87 Use Substr() in cpdf_syntax_parser.cpp9605f2f9c Vastly simplify CPDF_Type3Cache::m_SizeMapee2616e99 Refactor fpdf_ppo_embeddertest for runtime renderer selectiona7c6ff71d Avoid pointer arithmetic in FindFullName().322c87c3e Refactor fpdf_transformpage_embeddertest for runtime renderer selectionb588d237d Avoid pointer arithmetic in cfx_datetime.cpp6c759cd2f Avoid pointer arithmetic in RemoveAllHighLights().2a9c98c93 [Skia] Enable FPDFEditEmbedderTest.GetRenderedBitmapHandlesSMask2db19d607 [Skia] Convert Skia rendering results into an unpremultiplied format.a7adcb62c Re-work some HasCurrentViewRecord() calls.f28915d98 Make GetCurrentViewRecord() safe even when at end().0d76a139d Avoid de-referencing end() in GetNextAvailContentHeight().f27b228d6 Update some corpus test expectationsf2942c250 Improve memory management in CFGAS_GEFont::LoadFontInternal().3eaff6683 Document FPDF_RenderPageSkp().c34e23404 Remove some new statements from fx_skia_device.cpp.6f3c62423 Introduce pdf_use_partition_alloc build config variable.810b1aff4 Refactor fpdf_formfill_embeddertest for runtime renderer selection316fa08f5 Refactor edit embedder tests for runtime renderer selectione0ea309ba Refactor fpdf_editpage_embeddertest for runtime renderer selectionac1113060 Update to always include AGG62b90cc73 Refactor annot embedder tests for runtime renderer selectionf4f7c741d Use more spans in fx_skia_device.cpp.2cbb74c58 Rename render create and attach implementations5a1336a4f Switch away from FxFreeDeleter in fx_skia_device.cpp.31d54d1f4 Refactor fpdfapi/render tests for runtime renderer selection6cc084fb5 Refactor fpdfapi/parser tests for runtime renderer selectiona7fa28c3a Introduce Skia is renderer queries44ba1c67a [Skia] Fix the issue that images' transparency level is ignoreddc2660a14 Reduce duplicated code in CPDF_ImageRenderer::StartDIBBase().1bfb29df2 [Skia] Choose sampling options depending on the interpolate values</details>
Added a new function PdfDocument.get_version() to obtain the PDF version of a document.
Release 2.11.0
PdfDocument.get_version() to obtain the PDF version of a document.Commits between 2.10.0 and 2.11.0 (latest commit first):
has_ext_modules in a more official sort of wayCommits between `2.9.0` and `2.10.0` (latest commit first):
Commits between `2.8.0` and `2.9.0` (latest commit first):
Commits between `2.7.2` and `2.8.0` (latest commit first):
Release 2.8.0
Commits between 2.7.2 and 2.8.0 (latest commit first):
Added a new option rm_security to PdfDocument.save().
Release 2.7.2
rm_security to PdfDocument.save().merge, render, tile and toc.Commits between 2.7.1 and 2.7.2 (latest commit first):
latest for do_versioning() testingbuild_pdfiumartifacts to artefactscraft_artifacts.py to craft_packages.pymake check--passwords flag similar to mergerm_securityEnabled pinning of wheel and removed related warning filter in pyproject.toml.
Release 2.7.1
wheel and removed related warning filter in pyproject.toml.451e7767d233e3173d052c2708fad975c72f5417 Start listing ideas for API breaking changes
Release 2.6.0
FPDF_LoadMemDocument() to FPDF_LoadMemDocument64(). The latter uses size_t rather than int to avoid integer overflows on huge files.ctypesgen to a more recent stable commit in pyproject.toml, as the release is fairly outdated. Suggested pinning of wheel by code comment.Commits between 2.5.0 and 2.6.0 (latest commit first):
FPDF_LoadMemDocument64()Wheels are now correctly flagged as impure, for they contain a binary extension.
Release 2.5.0
trigger.yaml into release.yaml workflow, and mk_releasenotes.py into autorelease.py, which significantly simplifies the code base.Commits between 2.4.1 and 2.5.0 (latest commit first):
root_is_pure to falseThe manual summary of changes is now shown on the GitHub release page as well.
Release 2.4.1
Commits between 2.4.0 and 2.4.1:
Commits between `2.3.1` and `2.4.0`:
Release 2.4.0
Commits between 2.3.1 and 2.4.0:
colour_tohex() utility by using bit-shiftsfile_accessCommits between `2.3.0` and `2.3.1`:
Release 2.3.1
Commits between 2.3.0 and 2.3.1:
Commits between `2.2.0` and `2.3.0`:
Release 2.3.0
Commits between 2.2.0 and 2.3.0:
docs/make.batCommits between `2.1.0` and `2.2.0`:
Commits between `2.0.0` and `2.1.0`:
Release 2.1.0
Commits between 2.0.0 and 2.1.0:
Commits between `1.11.0` and `2.0.0`:
Release 2.0.0
Commits between 1.11.0 and 2.0.0:
pkg_resources to importlib.metadataraw propertyno_antialias optionCommits between `1.11.0` and `2.0.0b3`:
Release 2.0.0b3
Commits between 1.11.0 and 2.0.0b3:
pkg_resources to importlib.metadataraw propertyno_antialias optionCommits between `1.11.0` and `2.0.0b2`:
Release 2.0.0b2
Commits between 1.11.0 and 2.0.0b2:
raw propertyno_antialias optionCommits between `1.11.0` and `2.0.0b1`:
Commits between `1.10.0` and `1.11.0`:
Commits between `1.9.1` and `1.10.0`:
Release 1.10.0
Commits between 1.9.1 and 1.10.0:
PIL.Image importand vs. or blunder in crop_type()Commits between `1.9.0` and `1.9.1`:
Commits between `1.8.0` and `1.9.0`:
Release 1.9.0
Commits between 1.8.0 and 1.9.0:
make buildwheel packagetest_document to test_tocpackaging_basesetupsrc/pl_setup/test_document.pyCommits between `1.7.0` and `1.8.0`:
Release 1.8.0
Commits between 1.7.0 and 1.8.0:
_get_tool() callsdocs/markdown into docs/sourcewin/build.patchopen_pdf_buffer(): make automatic closure optional and disabled by defaultupdate_pdfium: minor improvementsCommits between `1.7.0` and `1.8.0b1`:
Release 1.8.0b1
Commits between 1.7.0 and 1.8.0b1:
_get_tool() callsdocs/markdown into docs/sourcewin/build.patchopen_pdf_buffer(): make automatic closure optional and disabled by defaultupdate_pdfium: minor improvementsCommits between `1.6.0` and `1.7.0`:
Release 1.7.0
Commits between 1.6.0 and 1.7.0:
find_llvm codellvm_prefixuse_cxx11Commits between `1.5.0` and `1.6.0`:
Release 1.6.0
Commits between 1.5.0 and 1.6.0:
use_cxx11functools.partial()Commits between 1.4.1 and 1.5.0:
Release 1.5.0
Commits between 1.4.1 and 1.5.0:
Commits between 1.4.0 and 1.4.1:
Release 1.4.1
Commits between 1.4.0 and 1.4.1:
strip(), just to be safeconf.pyn_processes parameter.format() to % (#101)Commits between 1.3.0 and 1.4.0:
Release 1.4.0
Commits between 1.3.0 and 1.4.0:
Commits between 1.3.0b1 and 1.3.0:
Release 1.3.0
Commits between 1.3.0b1 and 1.3.0:
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →