Releases: pypdfium2-team/pypdfium2
5.3.0
Changes (Release 5.3.0)
Summary (pypdfium2)
- Fixed inclusion of
loongarch64build in GH attestation. This was an oversight in the workflow. ppc64le (glibc)is now built at pdfium-binaries using upstream's tooling.
This means pypdfium2's conda builds now also support this platform.
Updated pypdfium2's setup/workflow accordingly to use the pdfium-binaries.
pypdfium2 commit log
Commits between 5.2.0 and 5.3.0 (latest commit first):
04b411a[autorelease main] update 5.3.0a34e0c0resources.rc: set just the year, remove -presentdb1d891Bump copyright year52a4689build_native: order functions as they are called7e2f78fbuild_native: a few more enhancements67f4874build_native: move legacy_libs_compat patch to proper place1ab4ce4build_native: apply container compat patch only where necessary6967832Drop now-unused patches5dbd1f2get_cross_deps: map ppc649b87ea9Patchless ppc64(le) build994125dPlatform detection hotfixf5d3795Bump pdfium pin to 7592 to make ppc64le workd0f4b03ppc64(le): use the pdfium-binaries29b697bSomewhat simplify utils/get_gcc_prefix.pyb9bbab6fix: include loongarch64 build in GH attestation32aa336build(deps): bump actions/download-artifact from 6 to 735b4f4cbuild(deps): bump actions/upload-artifact from 5 to 6c983a6canother pyproject.toml/cibw correctionf60638ereadme nit8ba2e9bcibw: fixdnf clean/makecachelogic
PDFium commit log
Commits between 7568 and 7616 (latest commit first):
99b9fd3b0Add new span versions of CJBig2_Image::GetLine()adab0df23Rename CJBig2_Image::GetLine() to GetLinePtr()f3518ab0aConsolidate identical compose code in CJBig2_Imagecb05cb24eUse unsigned bit position in FaxModule::FaxG4Decode()83b6a77b0Remove some UNSAFE_TODO() usage in CJBig2_Image31da67588Loosen restriction on CJBig2_Image::span()74eeccad8Add EmbedderTest::CompareBitmapToPng*() to check against PNGs8e788692dGet rid of remaining UNSAFE_TODO() usage in faxmodule.cppacff14385Get rid of UNSAFE_TODO() usage in FaxFillBits()fc16d1902Get rid of more UNSAFE_TODO() usage in faxmodule.cpp034ec4edaAdd CJBig2_Image::has_data()67c76beb2Clang-format code068862d16Test ToUnicodeMap bfrange behavior when the dest code goes above 0xffff87fa82919Remove a StringToCode() call in CPDF_ToUnicodeMap::HandleBeginBFRange()1012d41afAdd the complete list of clang GCS entriesae78a837fClean up some paths in testing/BUILD.gn41d163ef0Make CPDF_ToUnicodeMap::ReverseLookup() faster01a17c1ceTurn off more raw-ptr bits when pdf_use_partition_alloc=false3b52741bcStop reading arm_use_neonc62b86c55Make UnownedPtr work with implicit ctorf75eb7b9bReduce the scope of UNSAFE_TODO() macros in cstretchengine.cpp5cb9c7591Get rid of UNSAFE_TODO() usage in FaxEncoder403e0e78bRoll third_party/skia/ a9e9573a3..279bb3648 (208 commits; 38 trivial rolls)b8c2e9a17Do IWYU for stdint.h in //fxbarcode headers5ea29fc0dChange UnownedPtr's raw pointer ctor to be non-explicit8c7780d85Use more scopers within EmbedderTest9823c4f57Update RenderTransparencyOnWhiteBackground test49a2ab87dRemove out-parameters from testing/utils/path_service.h methods0a981f049Switch to backticks in comments in testing/embedder_test.h750df1d21Avoid direct raw_ptr use in fpdf_editpage.cppccb1bef3eRoll simdutf from acd71a451c1b to 75bea7342fda (2 revisions)23120ca1cRoll Code Coverage from 9e4876df273e to fc75c61d3a98 (1 revision)83bf49b9eDelete useless CFX_GlyphCache::RenderGlyph_Nativetext()d2b86b098Remove unused enum FontAntiAliasingMode valuesdc836edceMerge nearly identical code into SkFontFromCFXFont()31fc45e3aOverwrite the timezone for JS/pixel/corpus tests on macOS48a78762aHandle multiple plus and minus signs in string to num conversionsdd9b48378Update StringToFloatImpl() template class name757a4d855Add tests for multiple leading signs for string to num conversions801ef71faRoll third_party/icu/ f27805b7d..a86a32e67 (1 commit)f72e4722bRoll base/allocator/partition_allocator/ 2f4069fb8..e711e98fa (37 commit...
5.2.0
Changes (Release 5.2.0)
Summary (pypdfium2)
- Added new builds
android_{arm64_v8a,armeabi_v7a},{many,musl}linux_{ppc64le,riscv64,loongarch64}andmusllinux_armv7lto the release process. This greatly improves platform support. Loongarch is only uploaded to GH, as PyPI doesn't accept it yet. Replacedmusllinux_{x86_64,aarch64,i686}with our own builds, as they are a bit smaller than the pdfium-binaries. - Build
s390xthis once through emulated gcc, because static clang doesn't seem to produce working builds for this target. We may not be able to continue doing this. build_native.py: Added full dependency library vendoring abilities. This is now the default behavior on fallback setup. Integrated ninja/gn bootstrapping helpers.- CIBW workflow: Use vendored libraries for most Linux targets. Build
ppc64le, riscv64, loongarch64(and theoreticallys390x) using static clang that runs on the host architecture (even though from within an emulated container), while being pre-configured for cross-compilation to the target architecture. This is much faster than building with an emulated compiler. Many thanks to Matthieu Darbois (mayeut) of pypa/manylinux for coming up with this approach. - Greatly simplified verification of pdfium-binaries attestation in pypdfium2's setup. Thanks to Benoît Blanchon for attaching the attestation as artifact.
- Enabled immutability for pypdfium2's GitHub releases, and added build provenance attestations, like pdfium-binaries did.
pypdfium2 commit log
Commits between 5.2.0b1 and 5.2.0 (latest commit first):
c774578[autorelease main] update 5.2.0be30e32cibw: attempt to make package install more reliable on RHEL-based imagesf5cc6afTemporarily enable s390x (emulated gcc) for v5.2.023efe69Readme update (native sbuild / cibw)25213b7sbuild.yaml: hardcode glibc, add legacy manylinux2014 tag5d47540Slightly update main.yaml4270a1atextpage/docs: move note about line breaks6ef7916sbuild_native: remove stale, unused input130fa06Revert "Update changelog"1cce831workflows: auto-adapt branch02f224aUpdate changelog760ac8econda.yaml: add ability to set ref03c3f43main.yaml/augment: fixemulated1b66381main.yaml/augment: set fail-fast: false8904ad3main.yaml: formatting / wsd92a097main.yaml/augment: reorder targets2b2e900sbuild_one: run apt-get updatef66cad2main.yaml: attempt to deduplicate augment step2e9b9ddmain.yaml: add s390x, commented outc11acd2autorelease: clarify pdfium update message100ff5bAttempt to fix conda05f5006Add explanation why TestPyPI is currently commented out6905727ppc64le: add manylinux2014 tag356165fchangelog correctionb557aa5Put changelog in GH release desc after all, follow usual processd3716faManually fix changelog
PDFium commit log
Commits between 7557 and 7568 (latest commit first):
e3c8ca828Remove some unused includes of cfx_font.cpp43df95591Roll corpus tests againaccc1fb03Add premultiplied alpha support to test_runner.py9a6d63b87Add premultiplied alpha support to pdfium_test1aa30337fImprovepdfium_test --pngimplementation31a6ce372Reduce the number of parameters in pdfium_test's WriteFoo() functions5a2aa46d0Simplify static_assert() statements in fpdf_view.cpp3de86cb44Simplify SetRendererType()a8882bc9dUnified GetFooParamValue() and SetFooParam() implementations62c90734fRemove some stray FreeType-related usage040aa1292Use uint32_t for font face indices instead of size_tc122e190fReuse InitializeFreeType() on Android97d1584eaMove FreeType code out of cfx_fontmgr.cppab91cd971Remove FT_UInt usage in cfx_unicodeencodingex.cppa1229dedd[rust png] Fix handling ofdiscard_transparencyinEncodeBGRAPNG.287d53eaa[Skia] Handle odd-sized dashed line arrays correctlydc264b3b7[AGG] Handle odd-sized dashed line arrays correctlyc8a09ecb0Update pdfium_is_standalone description in README.md2edb4ecdaRoll libpng from 84d676669166 to a79803bfd168 (2 revisions)44a06aa38Generate build_with_chromium variable via //DEPS66c6bc409Roll Skia and update serial proc return value42476eac4Roll Zlib from 5aa617372945 to 63d7e16739d8 (1 revision)2c9001241Roll goldctl from dcfa817da658 to 68c457e302c1
5.2.0b1
Changes (Release 5.2.0b1)
Summary (pypdfium2)
- Updated PDFium from
7529to7557. - Added new builds
android_{arm64_v8a,armeabi_v7a},{many,musl}linux_{ppc64le,riscv64,loongarch64}andmusllinux_armv7lto the release process. This greatly improves platform support. Loongarch is only uploaded to GH, as PyPI doesn't accept it yet. Replacedmusllinux_{x86_64,aarch64,i686}with our own builds, as they are a bit smaller than the pdfium-binaries. build_native.py: Added full dependency library vendoring abilities. This is now the default behavior on fallback setup. Integrated ninja/gn bootstrapping helpers.- CIBW workflow: Use vendored libraries for most Linux targets. Build
ppc64le, riscv64, loongarch64(and theoreticallys390x) using static clang that runs on the host architecture (even though from within an emulated container), while being pre-configured for cross-compilation to the target architecture. This is much faster than building with an emulated compiler. Many thanks to Matthieu Darbois (mayeut) of pypa/manylinux for coming up with this approach. - Greatly simplified verification of pdfium-binaries attestation in pypdfium2's setup. Thanks to Benoît Blanchon for attaching the attestation as artifact.
- Enabled immutability for pypdfium2's GitHub releases, and added build provenance attestations, like pdfium-binaries did.
pypdfium2 commit log
Commits between 5.1.0 and 5.2.0b1 (latest commit first):
c1e05fc[autorelease main] update 5.2.0b1221756aautorelease/config.json: unset humble, set beta6554cbcTried to delete tags after alleb5e884Attempt fix for augmented builds version blunder0bf7f1fNext issue6a47cee[autorelease main] update 5.3.047da5cdFix blunder in publish step0b46c59[autorelease main] update 5.2.030f86fdImprove changelog wording236e52cAdd gh_only/ to .gitignore002ad34pyproject.toml: add comment10308e7Augment releases with our own builds (#398)063e40bmain.yaml: set immutableCreate: truec376f7aDon't needlessly call platform.{mac,win32,android}_ver()5e8b20aLean & reliable attestation verificatione285cebmain.yaml: add build provenance7482c55build(deps): bump actions/checkout from 5 to 6 (#397)5c7eef8bootstrap_buildtools(): logging8e45268cibw: vendor dependency libraries, except on s390x654564bbuild_native: full dependency lib vendoring abilitiesf108424Revert s390x again099b623cibw/clang: generally do not vendor libc++50a7319Test if s390x might work if we don't vendor the libc++8e2ade5cibw/s390x: back to emulated gcc5820626Update some commentsd637bf4Update changelog616ad3fbuild_native: update another comment8683ca1build_native: remove comment91f0f43Fix typoa91a189Fix needless f-strings again9f27f61Don't system_libcxx_with_clang.patch if libc++ is vendored6c7a287cibw.yaml: enable clangcross targets by defaultd90f886build_native: update comment on --vendora6a215bUpdate CIBW workflow875d114Don't vendor libc++ on musllinuxa808974Apply avoid_new_clang_flags.patch only if needed778c830Extend no_libclang_rt patch3a72edaAttempt static clang for ppc64le,s390x,riscv64,loongarch64016ebbfsbuil.yaml: add missing tag to macos_native_x64 testtarget08e6d66readme/raw api: avoid leftover sized pointerdf00279get_gcc_prefix: avoid needless f-string
5.1.0
Changes (Release 5.1.0)
Summary (pypdfium2)
- Added new helpers
textpage.get_textobj(),PdfTextObjandPdfFont.
These helpers currently just cover font info and object-level text extraction, but may be extended in the future.
For objects of typeFPDF_PAGEOBJ_TEXT,PdfPage.get_objects()and thePdfObjectconstructor will now returnPdfTextObjrather than justPdfObjectinstances.
Thanks to Mykola Skrynnyk for the initial proposal. - Rolled back
musllinuxtag from1_2to1_1. This was erroneously incremented shortly before5.0.0, but the pdfium-binaries do still run onmusllinux_1_1, probably because they're statically linked. build_toolchained: Significant portability enhancements. Should now work on Linux CPUs that are unhandled/incomplete upstream (e.g.aarch64). Also, building on Windows arm64 natively may now work. Added ability to cross-compileppc64lefromx86_64. Removed--use-syslibsoption (usebuild_nativeinstead).build_native: Fixed Python 3.6/3.7 compatibility. Added--no-libclang-rtoption.- Setup: Fixed inclusion of
BUILD_LICENSES/sub-directories. Added extra licenses for DLLs pulled in by auditwheel. This concerns sourcebuilds/cibuildwheel only. The wheels on PyPI are unaffected. - Added android targets to
sbuild.yamlworkflow. This does not impact releases, which still use the pdfium-binaries. - Added i686 (manylinux and musllinux) to cibuildwheel workflow.
Use an arm64 host (GHAubuntu-24.04-arm) for armv7l builds, which is much faster than with anx86_64host. Added armv7l manylinux target (previously just musllinux).
This does not impact releases yet, but it may in the future. - CI: Migrated from
macos-13tomacos-15-intel.
pypdfium2 commit log
Commits between 5.0.0 and 5.1.0 (latest commit first):
46afdae[autorelease main] update 5.1.0d6d1ea5build_toolchained: set config var regardless of sync1054d12Update RTD build host0c2eef0build_toolchained: update comment346bba0build_toolchained: use PORTABLE_MODE on musllinux and androidedad47emain.yaml: add ref to upload-artifact bug24aea3cUpdate changelog again6bc04d3main.yaml: propagate py_version28639a5Add a comment5c93651Readme: update sourcebuild section49404d2Fix reuse lint7cb5bc0Fix bootstrap_ninja()b4f2bc6Extract non-split-related work from PR #394d839e2eDefer _get_local_bin()6be8ad0build_toolchained: in PORTABLE_MODE, use bootstrap_buildtools()6fb248bMake bootstrap_gn target dir portable1613353Add proper ninja/gn bootstrapping functions6ec44e2Avoid setup-just action where we can0cd1f73Update changelog again5fc9bb0sbuild_one: fix artifact naming if target_os is set3998f82pdfium-binaries/android: bump to android_23a645230sbuild.yaml: attempt adding android buildsc739b22build_toolchained: continuea86826fbuild_toolchained: limit PORTABLE_MODE to Linux for now2c8bd51sbuild_one: dropjustdependency1bcc02aUpdate changelogf60248cchores: fixjust check, rename some patchesd9f66f0build_toolchained: more portability fixes9d32e5fsbuild.yaml: test build_toolchained.py on native arm64 runnerf54247cFurther build_toolchained improvements45c8084build_toolchained.py: add ppc64le cross-comp ability2d8e00bImprove portability of build_toolchained.py3eb8204Remove build_toolchained --syslibs from CI4c1038bbuild_native: add option to disable libclang_rt dependencyc345690Readme: somewhat update licenses sectionf5bff20Add extra licenses for cibuildwheel builds (#390)5159278Clarify and update changelog7e849deMerge pull request #392 from pypdfium2-team/font_helpers17c8412Parametrize font helpers test51d0adfAdd draft font helpersa816bfeUpdate REUSE.toml, fix typo in pyproject.tomlda3b4f5Make GN patch less invasive2e3d2baFactor out cloning utility for cibw gn bootstrap4b4e344cibw i686: try to improve GN bootstrapfef5d24Move patches9e0e53fcibw: fix manylinux_i686 target5bd0d31Drop emulated musllinux_armv7l target0e74a4ccibw: retry armv7l with newer imagee5f2212Comment out manylinux_armv7l againbcad837Yet another attempt at cibw/manylinux_armv7l0c7bde8cibw/pyproject.toml nits4b6f2dccibw/pyproject.toml: deduplicate symlinks (#389)8d6f6adcibw: give up on manylinux_armv7l for now767e3a5cibw: have another go at armv7lf06a078cibw: try to fix manylinux_{i68...
5.0.0
Changes (Release 5.0.0)
Summary (pypdfium2)
API changes
- Rendering / Bitmap
- Removed
PdfDocument.render()(see deprecation rationale in v4.25 changelog). Instead, usePdfPage.render()with a loop or process pool. - Removed
PdfBitmap.get_info()andPdfBitmapInfo, which existed mainly on behalf of data transfer withPdfDocument.render(). Instead, take the info from thePdfBitmapobject directly. (If using an adapter that copies, you may want to store the relevant info in variables to avoid holding a reference to the original buffer.) PdfBitmap.fill_rect(): Changed argument order. Thecolorparameter now goes first.PdfBitmap.to_numpy(): If the bitmap is single-channel (grayscale), use a 2d shape to avoid needlessly wrapping each pixel value in a list.PdfBitmap.from_pil(): Removedrecopyparameter.
- Removed
- Pageobjects
- Renamed
PdfObject.get_pos()to.get_bounds(). - Renamed
PdfImage.get_size()to.get_px_size(). PdfImage.extract(): Removedfb_renderoption because it does not fit in this API. If the image's rendered bitmap is desired, use.get_bitmap(render=True)in the first place.
- Renamed
PdfDocument.get_toc(): ReplacedPdfOutlineItemnamedtuple with method-oriented wrapper classesPdfBookmarkandPdfDest, so callers may retrieve only the properties they actually need. This is closer to pdfium's original API and exposes the underlying raw objects. Provides signed count as-is rather than splitting inn_kidsandis_closed. Also distinguishes betweendest is Noneand a dest with unknown mode.- Renamed misleading
PdfMatrix.mirror()parametersv, htoinvert_x, invert_y, as the terms horizontal/vertical flip commonly refer to the transformation applied, not the axis around which is being flipped (i.e. the previousvmeant flipping around the Y axis, which is vertical, but the resulting transform is inverting the X coordinates and thus actually horizontal). No behavior change if you did not use keyword arguments. PdfTextPage.get_text_range(): Removed implicit translation of default calls to.get_text_bounded(), as pdfium revertedFPDFText_GetText()to UCS-2, which resolves the allocation concern. However, callers are encouraged to explicitly use.get_text_bounded()for full Unicode support.- Removed legacy version flags
V_PYPDFIUM2, V_LIBPDFIUM, V_BUILDNAME, V_PDFIUM_IS_V8, V_LIBPDFIUM_FULLin favor ofPYPDFIUM_INFO, PDFIUM_INFO.
Improvements and new features
- Added
PdfPosConvandPdfBitmap.get_posconv(page)helper for bidirectional translation between page and bitmap coordinates. - Added
PdfObject.get_quad_points()to get the corner points of an image or text object. - Exposed
PdfPage.flatten()(previously semi-private_flatten()), after having found out how to correctly use it. Added check and updated docs accordingly. - With
PdfImage.get_bitmap(render=True), addedscale_to_originaloption (defaults to True) to temporarily scale the image to its native pixel size. This should improve output quality and make the API substantially more useful. Thanks to Lei Zhang for the suggestion. - Added context manager support to
PdfDocument, so it can be used in awith-statement, because opening from a file path binds a file descriptor (usually on the C side), which should be released explicitly, given OS limits. - If document loading failed,
err_codeis now assigned to thePdfiumErrorinstance so callers may programmatically handle the error subtype. This addresses {issue}308. - In
PdfPage.render(), added a new optionmaybe_alphato use a pixel format with alpha channel if page content has transparency, as rendering to a non-alpha bitmap is inefficient with PDFium in this case. Therefore, it is recommended to set this option to True if dynamic (page-dependent) pixel format selection is acceptable. Alternatively, you might want to use only BGRA viaforce_bitmap_format=pypdfium2.raw.FPDFBitmap_BGRA(at the cost of occupying more memory compared to BGR). - In
PdfBitmap.new_*()methods, avoid use of.from_raw(), and instead call the constructor directly, as most parameters are already known on the caller side when creating a bitmap. PdfPage.remove_obj()is now aware of objects nested in Form XObjects, and will use the new pdfium APIFPDFFormObj_RemoveObject()in that case. Correspondingly, a.containerattribute has been added toPdfObject, which points to the parent Form XObject, or None if the object is not nested.- In the rendering CLI, added
--invert-lightness --exclude-imagespost-processing options to render with selective lightness inversion. This may be useful to achieve a "dark theme" for light PDFs while preserving different colors, but goes at the cost of performance. (PDFium also provides a color scheme option, but this only allows you to set colors for certain object types, which are then forced on all instances of the type in question. This may flatten different colors into one, leading to a loss of visual information.) - Corrected some null pointer checks: we have to use
bool(ptr)rather thanptr is None. - In
PdfDocument.save(), changed default offlagsfromFPDF_NO_INCREMENTALto0, as suggested by an upstream maintainer. - Avoid creation of sized pointer types at runtime, to not blow up an unbounded pointer type cache of ctypes, which could effectively lead to a memory leak in a long-running application (i.e. do
(type * size).from_address(addressof(first_ptr.contents))instead ofcast(first_ptr, POINTER(type * size)).contents). Thanks to Richard Hundt for the bug report, {issue}346. The root issue (ctypes using an unbounded cache in the first place) has been fixed recently in Python3.14. See below for a list of APIs that were affected:- Anything using
_buffer_reader/_buffer_writerunder the hood (PdfDocumentcreated from byte stream input,PdfImage.load_jpeg(),PdfDocument.save()). PdfBitmap.from_raw()rsp.PdfBitmap._get_buffer()and their internal callers (PdfBitmapmakersnew_foreignandnew_foreign_simple,PdfImage.get_bitmap()).- Also, some Readme snippets were affected, including the raw API rendering example. The Readme has been updated to mention the problem and use
.from_address(...)instead. - With older versions of pypdfium2/python, periodically calling
ctypes._reset_cache()can work around this issue.
- Anything using
- Improved startup performance by deferring imports of optional dependencies to the point where they are actually needed, to avoid overhead if you do not use them.
- Simplified version classes (no API change expected).
Platforms
- Experimental Android (PEP 738) and iOS (PEP 730) support added.
Androidarm64_v8a,armeabi_v7a,x86_64,x86and iOSarm64device andarm64,x86_64simulators are now handled in setup and should implicitly download the right pdfium-binaries. Provided on a best effort basis, and largely untested. Testers/feedback welcome. - pypdfium2's setup is now also capable of producing wheels for these platforms, but they will not actually be included in releases at this time. (Once Termux ships Python 3.13, we may want to publish Android
arm64_v8aand maybearmeabi_v7awheels, but we do not intend to provide wheels for simulators.) - iOS will not actually work yet, as the PEP indicates binaries ought to be moved to a special Frameworks location for permission reasons, in which case you'd also have to patch pypdfium2's library search. We cannot do anything about this yet without access to a device or clearer instructions. Community help would be appreciated here.
- Added draft cibuildwheel workflow and configuration, as a second footing for the project (based on the native sourcebuild, see below). In the future, this may allow to stuff some Linux architecture gaps the quick & dirty way with emulation, or maybe new native runners. Many thanks to
wojiushixiaobaifor providing the initial workflow and helpful pointers.
Setup
- When pdfium binaries are downloaded implicitly on setup or
emplace.pyis run, we now pin the pdfium version by default. This is to prevent possible API breakage when pypdfium2 is installed from source. It should also make thegitdependency optional on default setup.update.pyandcraft.pycontinue to default to the latest pdfium-binaries version. pdfium-binariesnow use GitHub's new "immutable releases" feature and offer GitHub build provenance attestations, for enhanced supply chain safety. Many thanks to Benoit Blanchon and GitHub team. Conversely,update.pynow exposes a--verifyoption to mandate checking the attestation, which is enabled in our release workflow. Otherwise, verification will be automatically enabled if theghdependency is installed.- We finally have a build script that works without Google's toolchain, and instead uses system tools/libraries (
build_native.py). This has been inspired by thelibpdfiumCOPR /libpdfium-nojsAUR recipes. Thanks to the respective packagers for showing how to do this. By default, this will use the GCC compiler, but Clang should also work if you set up some symlinks. As of this writing, both passes on our Ubuntu x84_64/arm64 CI. - On host platforms not covered with
pdfium-binaries, setup now looks for system/libreoffice pdfium. If this is not available either,build_native.pywill be triggered. This can also be requested explicitly by settingPDFIUM_PLATFORMtofallback,system-searchorbuild-native. - Reworked setup to expose all targets through
PDFIUM_PLATFORM. Added propersystemstaging directory. Refactored integration of caller-provided data files to avoid ambiguity. See the updated Readme for details. - The toolchained build script continues to be available as well, but has been renamed from
sourcebuild.pytobuild_toolchained.py. - Both build scripts now pin pdfium to the version last tested by pypdfium2-team.
- With `build_...
5.0.0b2
Changes (Release 5.0.0b2)
Summary (pypdfium2)
API changes
- Rendering / Bitmap
- Removed
PdfDocument.render()(see deprecation rationale in v4.25 changelog). Instead, usePdfPage.render()with a loop or process pool. - Removed
PdfBitmap.get_info()andPdfBitmapInfo, which existed mainly on behalf of data transfer withPdfDocument.render(). Instead, take the info from thePdfBitmapobject directly. (If using an adapter that copies, you may want to store the relevant info in variables to avoid holding a reference to the original buffer.) PdfBitmap.fill_rect(): Changed argument order. Thecolorparameter now goes first.PdfBitmap.to_numpy(): If the bitmap is single-channel (grayscale), use a 2d shape to avoid needlessly wrapping each pixel value in a list.PdfBitmap.from_pil(): Removedrecopyparameter.
- Removed
- Pageobjects
- Renamed
PdfObject.get_pos()to.get_bounds(). - Renamed
PdfImage.get_size()to.get_px_size(). PdfImage.extract(): Removedfb_renderoption because it does not fit in this API. If the image's rendered bitmap is desired, use.get_bitmap(render=True)in the first place.
- Renamed
PdfDocument.get_toc(): ReplacedPdfOutlineItemnamedtuple with method-oriented wrapper classesPdfBookmarkandPdfDest, so callers may retrieve only the properties they actually need. This is closer to pdfium's original API and exposes the underlying raw objects. Provides signed count as-is rather than splitting inn_kidsandis_closed. Also distinguishes betweendest is Noneand a dest with unknown mode.- Renamed misleading
PdfMatrix.mirror()parametersv, htoinvert_x, invert_y, as the terms horizontal/vertical flip commonly refer to the transformation applied, not the axis around which is being flipped (i.e. the previousvmeant flipping around the Y axis, which is vertical, but the resulting transform is inverting the X coordinates and thus actually horizontal). No behavior change if you did not use keyword arguments. PdfTextPage.get_text_range(): Removed implicit translation of default calls to.get_text_bounded(), as pdfium revertedFPDFText_GetText()to UCS-2, which resolves the allocation concern. However, callers are encouraged to explicitly use.get_text_bounded()for full Unicode support.- Removed legacy version flags
V_PYPDFIUM2, V_LIBPDFIUM, V_BUILDNAME, V_PDFIUM_IS_V8, V_LIBPDFIUM_FULLin favor ofPYPDFIUM_INFO, PDFIUM_INFO.
Improvements and new features
- Added
PdfPosConvandPdfBitmap.get_posconv(page)helper for bidirectional translation between page and bitmap coordinates. - Added
PdfObject.get_quad_points()to get the corner points of an image or text object. - Exposed
PdfPage.flatten()(previously semi-private_flatten()), after having found out how to correctly use it. Added check and updated docs accordingly. - With
PdfImage.get_bitmap(render=True), addedscale_to_originaloption (defaults to True) to temporarily scale the image to its native pixel size. This should improve output quality and make the API substantially more useful. Thanks to Lei Zhang for the suggestion. - Added context manager support to
PdfDocument, so it can be used in awith-statement, because opening from a file path binds a file descriptor (usually on the C side), which should be released explicitly, given OS limits. - If document loading failed,
err_codeis now assigned to thePdfiumErrorinstance so callers may programmatically handle the error subtype. This addresses {issue}308. - In
PdfPage.render(), added a new optionuse_bgra_on_transparency. If there is page content with transparency, using BGR(x) may slow down PDFium. Therefore, it is recommended to set this option to True if dynamic (page-dependent) pixel format selection is acceptable. Alternatively, you might want to use only BGRA viaforce_bitmap_format=pypdfium2.raw.FPDFBitmap_BGRA(at the cost of occupying more memory compared to BGR). - In
PdfBitmap.new_*()methods, avoid use of.from_raw(), and instead call the constructor directly, as most parameters are already known on the caller side when creating a bitmap. PdfPage.remove_obj()is now aware of objects nested in Form XObjects, and will use the new pdfium APIFPDFFormObj_RemoveObject()in that case. Correspondingly, a.containerattribute has been added toPdfObject, which points to the parent Form XObject, or None if the object is not nested.- In the rendering CLI, added
--invert-lightness --exclude-imagespost-processing options to render with selective lightness inversion. This may be useful to achieve a "dark theme" for light PDFs while preserving different colors, but goes at the cost of performance. (PDFium also provides a color scheme option, but this only allows you to set colors for certain object types, which are then forced on all instances of the type in question. This may flatten different colors into one, leading to a loss of visual information.) - Corrected some null pointer checks: we have to use
bool(ptr)rather thanptr is None. - In
PdfDocument.save(), changed default offlagsfromFPDF_NO_INCREMENTALto0, as suggested by an upstream maintainer. - Avoid creation of sized pointer types at runtime, to not blow up an unbounded pointer type cache of ctypes, which could effectively lead to a memory leak in a long-running application (i.e. do
(type * size).from_address(addressof(first_ptr.contents))instead ofcast(first_ptr, POINTER(type * size)).contents). Thanks to Richard Hundt for the bug report, {issue}346. The root issue (ctypes using an unbounded cache in the first place) has been fixed recently in Python3.14. See below for a list of APIs that were affected:- Anything using
_buffer_reader/_buffer_writerunder the hood (PdfDocumentcreated from byte stream input,PdfImage.load_jpeg(),PdfDocument.save()). PdfBitmap.from_raw()rsp.PdfBitmap._get_buffer()and their internal callers (PdfBitmapmakersnew_foreignandnew_foreign_simple,PdfImage.get_bitmap()).- Also, some Readme snippets were affected, including the raw API rendering example. The Readme has been updated to mention the problem and use
.from_address(...)instead. - With older versions of pypdfium2/python, periodically calling
ctypes._reset_cache()can work around this issue.
- Anything using
- Improved startup performance by deferring imports of optional dependencies to the point where they are actually needed, to avoid overhead if you do not use them.
- Simplified version classes (no API change expected).
Platforms
- Experimental Android (PEP 738) and iOS (PEP 730) support added.
Androidarm64_v8a,armeabi_v7a,x86_64,x86and iOSarm64device andarm64,x86_64simulators are now handled in setup and should implicitly download the right pdfium-binaries. Provided on a best effort basis, and largely untested. Testers/feedback welcome. - pypdfium2's setup is now also capable of producing wheels for these platforms, but they will not actually be included in releases at this time. (Once Termux ships Python 3.13, we may want to publish Android
arm64_v8aand maybearmeabi_v7awheels, but we do not intend to provide wheels for simulators.) - iOS will not actually work yet, as the PEP indicates binaries ought to be moved to a special Frameworks location for permission reasons, in which case you'd also have to patch pypdfium2's library search. We cannot do anything about this yet without access to a device or clearer instructions. Community help would be appreciated here.
Setup
- When pdfium binaries are downloaded implicitly on setup or
emplace.pyis run, we now pin the pdfium version by default. This is to prevent possible API breakage when pypdfium2 is installed from source. It should also make thegitdependency optional on default setup.update.pyandcraft.pycontinue to default to the latest pdfium-binaries version. update.py: added--verifyoption to confirm authenticity of pdfium-binaries release via SLSA provenance. Requiresslsa-verifier. Thanks to Benoit Blanchon for the upstream part. Also thanks to ArcticLampyrid for the pointer.- We finally have a build script that works without Google's toolchain, and instead uses system tools/libraries (
build_native.py). This has been inspired by thelibpdfiumCOPR /libpdfium-nojsAUR recipes. Thanks to the respective packagers for showing how to do this. By default, this will use the GCC compiler, but Clang should also work if you set up some symlinks. As of this writing, both passes on our Ubuntu x84_64/arm64 CI. - On host platforms not covered with
pdfium-binaries, setup now looks for system/libreoffice pdfium. If this is not available either,build_native.pywill be triggered. This can also be requested explicitly by settingPDFIUM_PLATFORMtofallback,system-searchorbuild-native. - Reworked setup to expose all targets through
PDFIUM_PLATFORM. Added propersystemstaging directory. Refactored integration of caller-provided data files to avoid ambiguity. See the updated Readme for details. - The toolchained build script continues to be available as well, but has been renamed from
sourcebuild.pytobuild_toolchained.py. - Both build scripts now pin pdfium to the version last tested by pypdfium2-team.
- By default, the build scripts now generate separate DLLs for dependency libraries, but you may pass
--single-libto restore the previous behavior of bundling dependencies into a single pdfium DLL. Setup has been changed accordingly to collect libraries with globbing patterns. - With
build_toolchained.py --update, avoid callinggclient revertandgclient sync, because this seems to sync twice, which is slow. Instead, call onlygclient syncwith-D --reset. - With
pdfium-binaries, read the full version from theVERSIONfile embedded in the tarballs...
5.0.0b1
Changes (Release 5.0.0b1)
Summary (pypdfium2)
API changes
- Rendering / Bitmap
- Removed
PdfDocument.render()(see deprecation rationale in v4.25 changelog). Instead, usePdfPage.render()with a loop or process pool. - Removed
PdfBitmap.get_info()andPdfBitmapInfo, which existed mainly on behalf of data transfer withPdfDocument.render(). Instead, take the info from thePdfBitmapobject directly. (If using an adapter that copies, you may want to store the relevant info in variables to avoid holding a reference to the original buffer.) PdfBitmap.fill_rect(): Changed argument order. Thecolorparameter now goes first.PdfBitmap.to_numpy(): If the bitmap is single-channel (grayscale), use a 2d shape to avoid needlessly wrapping each pixel value in a list.PdfBitmap.from_pil(): Removedrecopyparameter.
- Removed
- Pageobjects
- Renamed
PdfObject.get_pos()to.get_bounds(). - Renamed
PdfImage.get_size()to.get_px_size(). PdfImage.extract(): Removedfb_renderoption because it does not fit in this API. If the image's rendered bitmap is desired, use.get_bitmap(render=True)in the first place.
- Renamed
PdfDocument.get_toc(): ReplacedPdfOutlineItemnamedtuple with method-oriented wrapper classesPdfBookmarkandPdfDest, so callers may retrieve only the properties they actually need. This is closer to pdfium's original API and exposes the underlying raw objects. Provides signed count as-is rather than splitting inn_kidsandis_closed. Also distinguishes betweendest is Noneand a dest with unknown mode.- Renamed misleading
PdfMatrix.mirror()parametersv, htoinvert_x, invert_y, as the terms horizontal/vertical flip commonly refer to the transformation applied, not the axis around which is being flipped (i.e. the previousvmeant flipping around the Y axis, which is vertical, but the resulting transform is inverting the X coordinates and thus actually horizontal). No behavior change if you did not use keyword arguments. get_text_range(): Removed implicit translation of default calls toget_text_bounded(), as pdfium revertedFPDFText_GetText()to UCS-2, which resolves the allocation concern. However, callers are encouraged to explicitly useget_text_bounded()for full Unicode support.- Removed legacy version flags.
Improvements and new features
- Added
PdfPosConvandPdfBitmap.get_posconv(page)helper for bidirectional translation between page and bitmap coordinates. - Added
PdfObject.get_quad_points()to get the corner points of an image or text object. - Exposed
PdfPage.flatten()(previously semi-private_flatten()), after having found out how to correctly use it. Added check and updated docs accordingly. - With
PdfImage.get_bitmap(render=True), addedscale_to_originaloption (defaults to True) to temporarily scale the image to its pixel size. Thanks to Lei Zhang for the suggestion. - Added context manager support to
PdfDocument, so it can be used in awith-statement, because opening from a file path binds a file descriptor (usually on the C side), which should be released explicitly, given OS limits. - If document loading failed,
err_codeis now assigned to thePdfiumErrorinstance so callers may programmatically handle the error subtype. - In
PdfPage.render(), added a new optionuse_bgra_on_transparency. If there is page content with transparency, using BGR(x) may slow down PDFium. Therefore, it is recommended to set this option to True if dynamic (page-dependent) pixel format selection is acceptable. Alternatively, you might want to use only BGRA viaforce_bitmap_format=pypdfium2.raw.FPDFBitmap_BGRA(at the cost of occupying more memory compared to BGR). - In
PdfBitmap.new_*()methods, avoid use of.from_raw(), and instead call the constructor directly, as most parameters are already known on the caller side when creating a bitmap. - In the rendering CLI, added
--invert-lightness --exclude-imagespost-processing options to render with selective lightness inversion. This may be useful to achieve a "dark theme" for light PDFs while preserving different colors, but goes at the cost of performance. (PDFium also provides a color scheme option, but this only allows you to set colors for certain object types, which are then forced on all instances of the type in question. This may flatten different colors into one, leading to a loss of visual information.) - Corrected some null pointer checks: we have to use
bool(ptr)rather thanptr is None. - Improved startup performance by deferring imports of optional dependencies to the point where they are actually needed, to avoid overhead if you do not use them.
- Simplified version classes (no API change expected).
Platforms
- Experimental Android support added (cf. PEP 738).
arm64_v8a,armeabi_v7a,x86_64,x86are now handled in setup and should implicitly download the right binaries. We do not publish any android wheels at this time (for one thing, PyPI/warehouse does not support them yet). However, we might want to packagearm64_v8a(and maybearmeabi_v7a) wheels in the future. Note, android support is provided on a best effort basis, and largely untested (only arm64 Termux prior to PEP 738 has been tested on the author's phone). Please report success or failure. - Experimental iOS support added as well (cf. PEP 730).
arm64device and simulator, andx86_64simulator are now handled and should implicitly download the right binaries. However, this is untested and may not be enough to get all the way through. In particular, the PEP hints that the binary needs to be moved to a Frameworks location, in which case you'd also need to change the library search path. No iOS wheels will be provided at this time. However, if there are testers and an actual demand, iOS arm64 wheels may be enabled in the future. - Note, we have no intent to package wheels for the simulators (
android x86_64/x86,ios arm64_simu/x86_64), as they are only relevant to developers, and installing from source with implicit binary download should be roughly equialvent.
Setup
- Avoid needlessly calling
_get_libc_ver(). Instead, call it only on Linux. A negative side effect of calling this unconditionally is that, on non-Linux platforms, an empty string may be returned, in which case the musllinux handler would be reached, which uses non-public API and isn't meant to be called on other platforms (though it seems to have passed). - If packaging with
PDFIUM_PLATFORM=sourcebuild, forward the platform tag determined bybdist_wheel's wrapper, rather than using the underlyingsysconfig.get_platform()directly. This may provide more accurate results, e.g. on macOS.
Project
- Made the runfile fail fast and propagate errors via bash
-eu. This is actually quite important to avoid potentially continuing on a broken state in CI. - CI: Added Linux aarch64 (GH now provides free runners) and Python 3.13 to the test matrix.
- Merged
tests_old/back intotests/. - Migrated from deprecated
.reuse/dep5/.reuse/dep5-wheelto more visibleREUSE.toml/REUSE-wheel.toml. - Docs: Improved logic when to include the unreleased version warning and upcoming changelog.
- Bumped minimum pdfium requirement in conda recipe to
>6635(effectively>=6638), due to new errchecks that are not version-guarded. - Cleanly split out conda packaging into an own file, and confined it to the
conda/directory, to avoid polluting the main setup code.
pypdfium2 commit log
Commits between 4.30.1 and 5.0.0b1 (latest commit first):
8ea3c9f[autorelease main] update 5.0.0b1c439329fix typos6d04facTake out android for now28ef5b3docs/conf.py: take out problematic assertion936314fCI/debugging: addverbose: true0882a90conda_raw: fix upload pathefcf088conda_raw: temporarily comment out schedulee2a760efix spelling029327av5 devel branch (#307)9e55a45Comment TestPyPI back in
PDFium commit log
Commits between 6899 and 6996 (latest commit first):
012fe571cFix unnecessary tree traversal in SearchNameNodeByNameInternal()3c2bfd785Refactor SearchNameNodeByNameInternal()a9f2f0f33Use CIDToGIDMap to fill font widths in FPDFText_LoadCidType2Font()- [
0d2d104ba](https://pdfium.googlesource.com/pdfium/+/0d2d104ba14aee8d9...
4.30.1
Changes (Release 4.30.1)
Summary (pypdfium2)
PdfPage.get_objects(): Don't register pageobjects as children, because they don't need to be closed by the caller when part of a page. This avoids excessive caching of weakrefs that are not cleaned up with the object they refer to.- Fixed another dotted filepath blunder in the
extract-imagesCLI. (ThePdfImage.extract()API is not affected this time.) - Adapted setup code to
bdist_wheelrelocation (moved from wheel to setuptools). - Fixed installation with reference bindings (
PDFIUM_BINDINGS=reference) by actually including them in the sdist and adding a missingmkdircall. (In older versions, this can be worked around by cloning the repository and creating the missing directory manually before installation.) - Fixed sourcebuild on windows by syncing patches with pdfium-binaries.
- Updated test expectations: due to changes in pdfium, some numbers are now slightly different.
- Fixed conda packaging: It is now required to explicitly specify
-c defaultswith--override-channels, presumably due to an upstream change. - Autorelease: Swapped default condition for minor/patch update, as pypdfium2 changes are likely more API-significant than pdfium updates. Added ability for manual override.
- Bumped workflows to Python 3.12.
- Updated docs on licensing.
- This is expected to be the last release of the v4 series.
pypdfium2 commit log
Commits between 4.30.0 and 4.30.1 (latest commit first):
b4e4105[autorelease main] update 4.30.108041a2publish: disable attestations, tmp comment outfebe1a4Changelog nits4fe6445Q&D adaption to bdist_wheel relocation (fixes #326)067847aFix reference bindings missing in sdist2ec6bd6workflows: re-enable conda_raw trigger1320a3fsourcebuild: sync patches with pdfium-binariesbe173a7changelog fixupb85745aUpdate test expectations5001bf9Prepare for possible release860bf97Revert "ClarifyCannot close object; library is destroyedcondition"6736a5dUpdate licensing docsce1fabaAdd missing mkdir with refbindings (fixes #320)ff2ff4bClarifyCannot close object; library is destroyedcondition0f4bba8PR template: use details summary rather than heading6bb675achore: slightly update PR template7dca75cconda: also add-c defaultsin workflowf250b34CLI/extract-images: Fix another dotted filepath blunder3fd35cfFix conda packaging (upstream behavior change) (#314)a07372dUpdate workflows to Python 3.12d8a3128versioning: swap minor/patch inc default, allow manual override38f5efePdfPage.get_objects(): don't register objects as kids6f13da6Slightly fix up changelog
PDFium commit log
Commits between 6462 and 6899 (latest commit first):
The pdfium commit log is omitted this time because it exceeded GH's character limit. See https://github.com/pypdfium2-team/pypdfium2/actions/runs/12419415378/job/34674787577: Error: Error 422: Validation Failed: {"resource":"Release","code":"custom","field":"body","message":"body is too long (maximum is 125000 characters)"}.
That's also why this GH release was created manually.
Update: added commit log as attachment (see below)
4.30.0
Changes (Release 4.30.0)
Summary (pypdfium2)
Backported bug fixes / corrections from current development branch to preferably leave v4 in a clean state.
- Fixed blunder in
PdfImage.extract()producing an incorrect output path for prefixes containing a dot. In theextract-imagesCLI, this caused all output images of a type to be written to the same path for a document containing a non-extension dot in the filename. - XFA / rendering CLI: Fixed incorrect recognition of document length.
pdf.init_forms()must be called beforelen(pdf). - Made
get_text_range()allocation adapt to pdfium version, asFPDFText_GetText()has been reverted to UCS-2. (See v4.28 changelog for background.) - Updated workflows to include both
macos-13andmacos-14in test matrices because v13 is Intel and v14 ARM64 on GH actions. Removed python 3.7 testing because not supported anymore onmacos-14runners.
pypdfium2 commit log
Commits between 4.29.0 and 4.30.0 (latest commit first):
6bf53c4[autorelease main] update 4.30.01e9e100Add changelog entry for workflows5ad40abTest both macOS ARM64 and Intel in all workflows600d36cTry to fix main workflow (GH arch change in macOS-latest)a057218Add changelog for backports653c38ctextpage: update docs2577f5b[BP] CLI/render: fix XFA document length recognitioneded6c2get_text_range(): adapt allocation to pdfium version7ce4d31PdfImage.extract(): fix for filenames containing non-extension dot5dc2eeeissue templates: reorder commands493742dMake issue templates slightly nicer391575aInhibit autorelease until v5 is merged
PDFium commit log
Commits between 6406 and 6462 (latest commit first):
7b7c83fbaRoll build/ bbc1efa4c..5eb3babb0 (147 commits)9783ba486Fix one more edited PDF regression01ea79cecUpdate hooks for reclient95b1aabeaAdd one more pixel test for an edited PDF that regressedaaf2cc937Roll clang to pick up unsafe_buffer_paths.txt format changes.6abd9f147Introduce fxcrt::try_spancpy() and fxcrt::try_spanmove().89d9beb11Roll v8/ 7f0739496..0832ba514 (553 commits; 1 trivial rolls)3a2e1651fRoll buildtools and libc++2c9060d69Roll third_party/abseil-cpp/ a64dd87ce..2c1ad970d (2 commits)c07eb97fdRoll third_party/fp16/src/ 0a92994d7..581ac1c79 (1 commit)32fff0d8cUpdate gn_version to f284b6b47039a2d7edfcbfc51f52664f82b5a789fa8edc249Roll third_party/skia/ 7338f5521..04ee4daae (438 commits)4d6d703ebRoll third_party/freetype/src/ f42ce2556..1168b1b5b (15 commits)0a3a3ee5cRoll base/allocator/partition_allocator/ 8a9c3373f..3b0bd80fa (37 commits)ad5237f89Roll tools/rust/ eaff38a21..8fcf2bf39 (15 commits)95cb40c79Roll third_party/libc++abi/src/ 1317096ef..51fe35844 (2 commits)2d1bd6c9aUpdate reclient_version to 0.138.0.e854224-gomaip8342a586dUse spancpy() in more places02ff1756cFix yet another edited PDF that regressed7d687a0a3Introduce {Byte,Wide}String::span_with_terminator().64447358eMark fx_memcpy_wrappers.h functions UNSAFE_BUFFER_USAGE.7cf8895f6Enable fuzzing with Skia enabled155028a48Add yet another pixel test for an edited PDF that regressedff78e42dfRoll Code Coverage from f459fdcdfc6c to 1b0ca9db1266 (3 revisions)926b395d8Roll Depot Tools from 4a9d989f52e9 to 4246ba023a15 (107 revisions)0b4ff9a49Roll libpng from 5140e80f1841 to 34954dfe60ef (2 revisions)863c78226Roll Instrumented Libraries from 0172d67d98df to 682a735d9f5c (18 revisions)8b5bd138eRoll Catapult from 949df6114f3f to 5fbda23b3a86 (52 revisions)0be533aeaRoll Memory Tools from c6d669e13804 to 2448d81f9741 (1 revision)97c93fd37Roll abseil-cpp, buildtools, clang, and libc++1a5ec9fb4Gate GDI APIs behind IsUser32AndGdi32Available in cpdf_interactiveform.cppfde20e170Deduplicate code in CPDF_Parser and rename some methods763c169beFix parsing of PDFs with multiple cross reference streamsbc759a2aeAdd another pixel test for an edited PDF that regressed2c66e07e9Spanify CFX_SeekableStreamProxyd6a4b27d8Spanify FPDFText_GetText() and FPDF_GetBoundedText().1a8053c08Don't allow two-arg span constructor without UNSAFE_BUFFER() annotation.3f197528dApply UNSAFE_BUFFERS() to two-arg span ctor in core/f0dc864fbPut plugin-specific logic in pdfium_common_config.1eb7ddcf1Apply UNSAFE_BUFFERS() to two-arg span ctor in xfa/590668ba7Apply UNSAFE_BUFFERS() to two-arg span ctor in testing/3b679fe3fApply UNSAFE_BUFFERS() to two-arg span ctor in fpdfsdk/317e40e19Use new instrumented_libs repo0e4ff8cd8Roll Zlib from c5bf1b566e5d to d076d8bd0898 (6 revisions)- [
5a49e751e](https://pdfium.google...
4.29.0
Changes (Release 4.29.0)
Summary (pypdfium2)
pypdfium2 commit log
PDFium commit log
Commits between 6337 and 6406 (latest commit first):
b756612c7Use the new v8 interceptor APIafc399ff5Roll v8/ fe4ad3b98..f6f7c6822 (302 commits)6af6c6197Fix unsafe pointer usage in CJX_HostPseudoModelb9ebffc36Fix typo in {Byte,Wide}StringView.TrimmedRight tests567dff87bAvoid unsafe indexing in EncodeURL()7ca0110e3Use WriteFloat() inside WriteColorToStream()f6df154e3Fix some unsafe buffer usage in CPDF_Dest.6ddcbf24bMark one remaining unsafe function in core/fpdfapi/edit.2855deed0Do not write out /Page objects that are not in the page treee4cebef61Roll tools/rust/ 1d0018c65..eaff38a21 (6 commits)b870f6853Roll third_party/skia/ 32f1cb507..7338f5521 (263 commits)93c8137d8Roll base/allocator/partition_allocator/ c702699cc..8a9c3373f (30 commits)e707409fcRoll third_party/libc++abi/src/ fc6253a64..1317096ef (2 commits)6123bc06aRoll third_party/libunwind/src/ fc505746f..419b03c0b (2 commits)77b0d2a1bUpdate reclient_version to 0.134.1.2c9285b-gomaip9dfab8917Roll third_party/googletest/src/ e4fdb87e7..eff443c6e (7 commits)bf35e1110Roll third_party/freetype/src/ 2a790a9f4..f42ce2556 (4 commits)483e5e1f5Change cfx_cmyk_to_srgb code to return struct FX_RGB0095eef10Improve comments and naming in calculate_pitch.hd43b6ce46Update gn_version to 93ee9b91423c1f1f53fb5f6cba7b8eef6247a5648ba296abdRoll Depot Tools from fbb0301f1f70 to 4a9d989f52e9 (81 revisions)027aa4b67Roll Code Coverage from 10ce382356ce to f459fdcdfc6c (9 revisions)d7ec4201bSwitch CPDF_MeshStream to use FX_RGBffbbea8d3Add struct FX_RGB2238fbe1bAdd fpdfsdk/{pwl,formfiller,fpdfxfa}/ directories to unsafe buffers.e9b7be916Make SBThemeData::clrBtnBK a one-dimensional array.008339888Remove FXSYS_wcstof in favor of system wcstof().e5458325dAdd some FPDFDocEmbedderTests that delete pages and savefb8abcb82Enforce checking the return value of CFX_DIBitmap::Create()8111f8946Put unsafe buffer configuration into PDFiumfe581ab87Roll build/ e9a12f276..e5ff2eff3 (85 commits)e58d4d723Roll third_party/icu/ 1112fa6b3..d94ab131b (8 commits)278639036Flag remaining unsafe buffer usage in fxcrt.e21f71a90Change CPDF_MeshStream::ReadColor() to return an array1f9ae706cFix undefined behavior in DrawGouraud()d9a020955Fix some nits in DrawGouraud()1c2507320Roll Catapult from 4dc7721a1444 to 949df6114f3f (83 revisions)ec275ee3eRoll libpng from 3c7486b231c7 to 5140e80f1841 (1 revision)c0800e8bdRemove Skia Sfntly dependency27062af25Remove more wide string literals.7df165065Remove some FXSYS_ functions in favor of std::char_traits<>.11b5f3bdbSimplify CFXJSE_NodeHelper::CreateNodeForCondition().a9646b460Fix regression in coverage_report.pyadc1b16a3Set a default GN enable_safe_libstdcxx value2f6cef867Avoid a compiler compatibility issue with CPDF_DefaultAppearancee15b92e44Convert some WideString::CompareNoCase() to EqualsASCIINoCase().71a0c1d89Replace ptr/size pair with span in FXJSE_CLASS_DESCRIPTOR.e8ef976cbRemove in-out parameter from GetFontFamily.11f9c8674Enable UNOWNED_PTR_EXCLUSION checks for debug builds only.b214b50e4Adjust BUILD.gn files for path-based unsafe buffer warnings.2dc694121Remove another parameter from CPDF_AnnotList methods7063716b1Avoid calls to c_str() in cpdf_filespec.cpp.c9f2bf183Avoid duplicate checks in StringViewTemplate<>::Substr().70e774a94Remove dead code in RenderPageImpl() calleesb039c387eImprove generated content stream data in cpdf_generateap.cppb119e4ac5Make FPDFAnnotEmbedderTest.Bug1206 resiliant to changes1eac2c692Remove use of string to hold binary data in cgdi_device_driver.cpp.f93971a09Move some fx_system.h replacements into a C++ only section.- [
49089b8ad](https://pdfium.googlesource.com/pdfium/+/49089b8ad03587207e...