What's Changed
The 2.0.0 release of PyPDF2 includes three core changes:
- Dropping support for Python 3.5 and older.
- Introducing type annotations.
- Interface changes, mostly to have PEP8-compliant names
We introduced a deprecation process
that hopefully helps users to avoid unexpected breaking changes.
Breaking Changes (DEP)
- PyPDF2 2.0 requires Python 3.6+. Python 2.7 and 3.5 support were dropped.
- PdfFileReader: The "warndest" parameter was removed
- PdfFileReader and PdfFileMerger no longer have the
overwriteWarnings
parameter. The new behavior isoverwriteWarnings=False
. - merger: OutlinesObject was removed without replacement.
- merger.py ➔ _merger.py: You must import PdfFileMerger from PyPDF2 directly.
- utils:
ConvertFunctionsToVirtualList
was removedformatWarning
was removedisInt(obj)
: Useinstance(obj, int)
insteadu_(s)
: Uses
directlychr_(c)
: Usechr(c)
insteadbarray(b)
: Usebytearray(b)
insteadisBytes(b)
: Useinstance(b, type(bytes()))
insteadxrange_fn
: Userange
insteadstring_type
: Usestr
insteadisString(s)
: Useinstance(s, str)
instead_basestring
: Usestr
instead- All Exceptions are now in
PyPDF2.errors
:- PageSizeNotDefinedError
- PdfReadError
- PdfReadWarning
- PyPdfError
PyPDF2.pdf
(thepdf
module) no longer exists. The contents were moved with
the library. You should most likely import directly fromPyPDF2
instead.
TheRectangleObject
is inPyPDF2.generic
.- The
Resources
,Scripts
, andTests
will no longer be part of the distribution
files on PyPI. This should have little to no impact on most people. The
Tests
are renamed totests
, theResources
are renamed toresources
.
Both are still in the git repository. TheScripts
are now in
https://github.com/py-pdf/cpdf.Sample_Code
was moved to thedocs
.
For a full list of deprecated functions, please see the changelog of version
1.28.0.
New Features (ENH)
- Improve space setting for text extraction (#922)
- Allow setting the decryption password in PdfReader.init (#920)
- Add Page.add_transformation (#883)
Bug Fixes (BUG)
- Fix error adding transformation to page without /Contents (#908)
Robustness (ROB)
- Cope with invalid length in streams (#861)
Documentation (DOC)
Developer Experience (DEV)
Maintenance (MAINT)
- Use Python 3.6 language features (#849)
- Add wrapper function for PendingDeprecationWarnings (#928)
- Use new PEP8 compliant names (#884)
- Explicitly represent transformation matrix (#878)
- Inline PAGE_RANGE_HELP string (#874)
- Remove unnecessary generics imports (#873)
- Remove star imports (#865)
- merger.py ➔ _merger.py (#864)
- Type annotations for all functions/methods (#854)
- Add initial type support with mypy (#853)
Testing (TST)
- Regression test for xmp_metadata converter (#923)
- Checkout submodule sample-files for benchmark
- Add text extracting performance benchmark
- Use new PyPDF2 API in benchmark (#902)
- Make test suite fail for uncaught warnings (#892)
- Remove -OO testrun from CI (#901)
- Improve tests for convert_to_int (#899)
Full Changelog: 1.28.4...2.0.0