Cédric Krier pushed to branch branch/default at Tryton / Tryton


Commits:
edb0c683 by Cédric Krier at 2022-12-23T17:13:53+01:00
Add support for PyPDF2 method for versions: 1, 2 and 3

Closes #11961
- - - - -


3 changed files:

- modules/account_invoice_watermark/account.py
- modules/stock_package_shipping_dpd/stock.py
- modules/stock_package_shipping_mygls/stock.py


Changes:

=====================================
modules/account_invoice_watermark/account.py
=====================================
@@ -50,11 +50,21 @@
     def merge(cls, invoice, watermark):
         output = PdfWriter()
         invoice = PdfReader(BytesIO(invoice))
-        watermark = PdfReader(BytesIO(watermark)).getPage(0)
-        for i in range(invoice.getNumPages()):
-            page = invoice.getPage(i)
-            page.mergePage(watermark)
-            output.addPage(page)
+        watermark = PdfReader(BytesIO(watermark))
+        if hasattr(watermark, 'pages'):
+            watermark = watermark.pages[0]
+        else:
+            watermark = watermark.getNumPages(0)
+        for i in range(len(invoice.pages)):
+            page = invoice.pages[i]
+            if hasattr(page, 'merge_page'):
+                page.merge_page(watermark)
+            else:
+                page.mergePage(watermark)
+            if hasattr(output, 'add_page'):
+                output.add_page(page)
+            else:
+                output.addPage(page)
         data = BytesIO()
         output.write(data)
         return data.getvalue()


=====================================
modules/stock_package_shipping_dpd/stock.py
=====================================
@@ -28,6 +28,14 @@
 TRACKING_URL = 'https://tracking.dpd.de/status/%(code)s/parcel/%(reference)s'
 
 
+def iter_pdf_pages(document):
+    if hasattr(document, 'pages'):
+        yield from document.pages
+    else:
+        for i in range(document.getNumPages()):
+            yield document.getPage(i)
+
+
 class Package(metaclass=PoolMeta):
     __name__ = 'stock.package'
 
@@ -175,6 +183,6 @@
         labels = []
         labels_pdf = BytesIO(shipment_response.parcellabelsPDF)
         reader = PdfReader(labels_pdf)
-        for page_num in range(reader.getNumPages()):
+        for page in iter_pdf_pages(reader):
             new_pdf = PdfWriter()
             new_label = BytesIO()
@@ -179,6 +187,9 @@
             new_pdf = PdfWriter()
             new_label = BytesIO()
-            new_pdf.addPage(reader.getPage(page_num))
+            if hasattr(new_pdf, 'add_page'):
+                new_pdf.add_page(page)
+            else:
+                new_pdf.addPage(page)
             new_pdf.write(new_label)
             labels.append(new_label)
 


=====================================
modules/stock_package_shipping_mygls/stock.py
=====================================
@@ -21,6 +21,14 @@
 from .exceptions import MyGLSError
 
 
+def iter_pdf_pages(document):
+    if hasattr(document, 'pages'):
+        yield from document.pages
+    else:
+        for i in range(document.getNumPages()):
+            yield document.getPage(i)
+
+
 class Package(metaclass=PoolMeta):
     __name__ = 'stock.package'
 
@@ -172,6 +180,6 @@
 
         labels = []
         reader = PdfReader(BytesIO(response.Labels))
-        for i in range(reader.getNumPages()):
+        for i, page in enumerate(iter_pdf_pages(reader)):
             pdf = PdfWriter()
             label = BytesIO()
@@ -176,6 +184,9 @@
             pdf = PdfWriter()
             label = BytesIO()
-            pdf.addPage(reader.getPage(i))
+            if hasattr(pdf, 'add_page'):
+                pdf.add_page(page)
+            else:
+                pdf.addPage(page)
             pdf.write(label)
             if carrier.mygls_type_of_printer in {'A4_2x2', 'A4_4x1'}:
                 if carrier.mygls_type_of_printer == 'A4_2x2':



View it on Heptapod: 
https://foss.heptapod.net/tryton/tryton/-/commit/edb0c6830caf2969f53d7f1c82337841c374081b

-- 
View it on Heptapod: 
https://foss.heptapod.net/tryton/tryton/-/commit/edb0c6830caf2969f53d7f1c82337841c374081b
You're receiving this email because of your account on foss.heptapod.net.


Reply via email to