Skip to content

Commit 136158c

Browse files
committed
[IMP] report_qweb_pdf_watermark: support pypdf >= 2.0
1 parent f193f8d commit 136158c

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

report_qweb_pdf_watermark/models/report.py

+22-9
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,17 @@
1919
logger.error("ImportError: The PdfImagePlugin could not be imported")
2020

2121
try:
22-
from PyPDF2 import PdfFileReader, PdfFileWriter # pylint: disable=W0404
23-
from PyPDF2.utils import PdfReadError # pylint: disable=W0404
22+
try:
23+
from PyPDF2 import PdfReader, PdfWriter # pylint: disable=W0404
24+
from PyPDF2.errors import PdfReadError # pypdf >= 2.0
25+
except ImportError:
26+
from PyPDF2 import ( # pylint: disable=W0404
27+
PdfFileReader as PdfReader,
28+
)
29+
from PyPDF2 import (
30+
PdfFileWriter as PdfWriter,
31+
)
32+
from PyPDF2.utils import PdfReadError # pypdf < 2.0
2433
except ImportError:
2534
logger.debug("Can not import PyPDF2")
2635

@@ -109,11 +118,11 @@ def _run_wkhtmltopdf(
109118
if not watermark:
110119
return result
111120

112-
pdf = PdfFileWriter()
121+
pdf = PdfWriter()
113122
pdf_watermark = None
114123
try:
115-
pdf_watermark = PdfFileReader(BytesIO(watermark))
116-
except PdfReadError:
124+
pdf_watermark = PdfReader(BytesIO(watermark))
125+
except (UnicodeDecodeError, PdfReadError):
117126
# let's see if we can convert this with pillow
118127
try:
119128
Image.init()
@@ -125,7 +134,7 @@ def _run_wkhtmltopdf(
125134
if isinstance(resolution, tuple):
126135
resolution = resolution[0]
127136
image.save(pdf_buffer, "pdf", resolution=resolution)
128-
pdf_watermark = PdfFileReader(pdf_buffer)
137+
pdf_watermark = PdfReader(pdf_buffer)
129138
except Exception as e:
130139
logger.exception("Failed to load watermark", e)
131140

@@ -136,12 +145,16 @@ def _run_wkhtmltopdf(
136145
if not self.pdf_has_usable_pages(pdf_watermark.numPages):
137146
return result
138147

139-
for page in PdfFileReader(BytesIO(result)).pages:
148+
for page in PdfReader(BytesIO(result)).pages:
140149
watermark_page = pdf.addBlankPage(
141150
page.mediaBox.getWidth(), page.mediaBox.getHeight()
142151
)
143-
watermark_page.mergePage(pdf_watermark.getPage(0))
144-
watermark_page.mergePage(page)
152+
# merge_page is >= 2.0, mergePage < 2.0
153+
merge_page = (
154+
getattr(watermark_page, "merge_page", None) or watermark_page.mergePage
155+
)
156+
merge_page(pdf_watermark.getPage(0))
157+
merge_page(page)
145158

146159
pdf_content = BytesIO()
147160
pdf.write(pdf_content)

0 commit comments

Comments
 (0)