19
19
logger .error ("ImportError: The PdfImagePlugin could not be imported" )
20
20
21
21
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
24
33
except ImportError :
25
34
logger .debug ("Can not import PyPDF2" )
26
35
@@ -109,11 +118,11 @@ def _run_wkhtmltopdf(
109
118
if not watermark :
110
119
return result
111
120
112
- pdf = PdfFileWriter ()
121
+ pdf = PdfWriter ()
113
122
pdf_watermark = None
114
123
try :
115
- pdf_watermark = PdfFileReader (BytesIO (watermark ))
116
- except PdfReadError :
124
+ pdf_watermark = PdfReader (BytesIO (watermark ))
125
+ except ( UnicodeDecodeError , PdfReadError ) :
117
126
# let's see if we can convert this with pillow
118
127
try :
119
128
Image .init ()
@@ -125,7 +134,7 @@ def _run_wkhtmltopdf(
125
134
if isinstance (resolution , tuple ):
126
135
resolution = resolution [0 ]
127
136
image .save (pdf_buffer , "pdf" , resolution = resolution )
128
- pdf_watermark = PdfFileReader (pdf_buffer )
137
+ pdf_watermark = PdfReader (pdf_buffer )
129
138
except Exception as e :
130
139
logger .exception ("Failed to load watermark" , e )
131
140
@@ -136,12 +145,16 @@ def _run_wkhtmltopdf(
136
145
if not self .pdf_has_usable_pages (pdf_watermark .numPages ):
137
146
return result
138
147
139
- for page in PdfFileReader (BytesIO (result )).pages :
148
+ for page in PdfReader (BytesIO (result )).pages :
140
149
watermark_page = pdf .addBlankPage (
141
150
page .mediaBox .getWidth (), page .mediaBox .getHeight ()
142
151
)
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 )
145
158
146
159
pdf_content = BytesIO ()
147
160
pdf .write (pdf_content )
0 commit comments