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