Skip to content

Commit fabb5d3

Browse files
committed
[IMP] report_qweb_pdf_watermark: support pypdf >= 2.0
1 parent 428dbe7 commit fabb5d3

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

report_qweb_pdf_watermark/models/report.py

+21-9
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

@@ -108,11 +116,11 @@ def _run_wkhtmltopdf(
108116
if not watermark:
109117
return result
110118

111-
pdf = PdfFileWriter()
119+
pdf = PdfWriter()
112120
pdf_watermark = None
113121
try:
114-
pdf_watermark = PdfFileReader(BytesIO(watermark))
115-
except PdfReadError:
122+
pdf_watermark = PdfReader(BytesIO(watermark))
123+
except (UnicodeDecodeError, PdfReadError):
116124
# let's see if we can convert this with pillow
117125
try:
118126
Image.init()
@@ -124,7 +132,7 @@ def _run_wkhtmltopdf(
124132
if isinstance(resolution, tuple):
125133
resolution = resolution[0]
126134
image.save(pdf_buffer, "pdf", resolution=resolution)
127-
pdf_watermark = PdfFileReader(pdf_buffer)
135+
pdf_watermark = PdfReader(pdf_buffer)
128136
except Exception as e:
129137
logger.exception("Failed to load watermark", e)
130138

@@ -135,12 +143,16 @@ def _run_wkhtmltopdf(
135143
if not self.pdf_has_usable_pages(pdf_watermark.numPages):
136144
return result
137145

138-
for page in PdfFileReader(BytesIO(result)).pages:
146+
for page in PdfReader(BytesIO(result)).pages:
139147
watermark_page = pdf.addBlankPage(
140148
page.mediaBox.getWidth(), page.mediaBox.getHeight()
141149
)
142-
watermark_page.mergePage(pdf_watermark.getPage(0))
143-
watermark_page.mergePage(page)
150+
# merge_page is >= 2.0, mergePage < 2.0
151+
merge_page = (
152+
getattr(watermark_page, "merge_page", None) or watermark_page.mergePage
153+
)
154+
merge_page(pdf_watermark.getPage(0))
155+
merge_page(page)
144156

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

0 commit comments

Comments
 (0)