Fix PyPDF2 3.0+ compatibility issues

Add compatibility wrapper classes for PdfFileWriter/PdfFileReader
to support both PyPDF2 2.x and 3.x versions.

Changes:
- Add PdfWriter/PdfReader compatibility wrappers in odoo/tools/pdf.py
- Add compatibility classes in odoo/addons/base/models/ir_actions_report.py
- Create comprehensive documentation in doc/PATCH_PDFWRITER.md

Resolves PyPDF2.errors.DeprecationError: PdfFileWriter is deprecated
and was removed in PyPDF2 3.0.0.

🤖 assisted by claude
This commit is contained in:
Ernad Husremovic 2025-09-02 18:47:52 +02:00
parent 2483097b1b
commit e8119c9226
3 changed files with 182 additions and 7 deletions

View file

@ -24,7 +24,33 @@ from lxml import etree
from contextlib import closing
from reportlab.graphics.barcode import createBarcodeDrawing
from reportlab.pdfbase.pdfmetrics import getFont, TypeFace
from PyPDF2 import PdfFileWriter, PdfFileReader
try:
from PyPDF2 import PdfWriter, PdfReader
# Create compatibility classes for old PyPDF2 API
class PdfFileWriter(PdfWriter):
def addPage(self, page):
return self.add_page(page)
def addMetadata(self, metadata):
return self.add_metadata(metadata)
def appendPagesFromReader(self, reader, after_page_append=None):
return self.append_pages_from_reader(reader, after_page_append)
class PdfFileReader(PdfReader):
def getNumPages(self):
return len(self.pages)
def getPage(self, page_num):
return self.pages[page_num]
@property
def numPages(self):
return len(self.pages)
except ImportError:
from PyPDF2 import PdfFileWriter, PdfFileReader
from collections import OrderedDict
from collections.abc import Iterable
from PIL import Image, ImageFile