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