Skip to content

Commit f7af6e2

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

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

report_qweb_pdf_watermark/models/report.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,16 @@
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+
23+
try:
24+
from PyPDF2 import PdfReader, PdfWriter # pylint: disable=W0404
25+
from PyPDF2.errors import PdfReadError # pypdf >= 2.0
26+
except ImportError:
27+
from PyPDF2 import ( # pylint: disable=W0404
28+
PdfFileReader as PdfReader,
29+
PdfFileWriter as PdfWriter,
30+
)
31+
from PyPDF2.utils import PdfReadError # pypdf < 2.0
2432
except ImportError:
2533
logger.debug("Can not import PyPDF2")
2634

@@ -109,11 +117,11 @@ def _run_wkhtmltopdf(
109117
if not watermark:
110118
return result
111119

112-
pdf = PdfFileWriter()
120+
pdf = PdfWriter()
113121
pdf_watermark = None
114122
try:
115-
pdf_watermark = PdfFileReader(BytesIO(watermark))
116-
except PdfReadError:
123+
pdf_watermark = PdfReader(BytesIO(watermark))
124+
except (UnicodeDecodeError, PdfReadError):
117125
# let's see if we can convert this with pillow
118126
try:
119127
Image.init()
@@ -125,7 +133,7 @@ def _run_wkhtmltopdf(
125133
if isinstance(resolution, tuple):
126134
resolution = resolution[0]
127135
image.save(pdf_buffer, "pdf", resolution=resolution)
128-
pdf_watermark = PdfFileReader(pdf_buffer)
136+
pdf_watermark = PdfReader(pdf_buffer)
129137
except Exception as e:
130138
logger.exception("Failed to load watermark", e)
131139

@@ -136,12 +144,16 @@ def _run_wkhtmltopdf(
136144
if not self.pdf_has_usable_pages(pdf_watermark.numPages):
137145
return result
138146

139-
for page in PdfFileReader(BytesIO(result)).pages:
147+
for page in PdfReader(BytesIO(result)).pages:
140148
watermark_page = pdf.addBlankPage(
141149
page.mediaBox.getWidth(), page.mediaBox.getHeight()
142150
)
143-
watermark_page.mergePage(pdf_watermark.getPage(0))
144-
watermark_page.mergePage(page)
151+
# merge_page is >= 2.0, mergePage < 2.0
152+
merge_page = (
153+
getattr(watermark_page, "merge_page", None) or watermark_page.mergePage
154+
)
155+
merge_page(pdf_watermark.getPage(0))
156+
merge_page(page)
145157

146158
pdf_content = BytesIO()
147159
pdf.write(pdf_content)

0 commit comments

Comments
 (0)