@@ -23,12 +23,7 @@ def execute_wk(*args):
2323 wk_args = (wkhtmltopdf_cmd ,) + args
2424 p = subprocess .Popen (wk_args , stdout = subprocess .PIPE , stderr = subprocess .PIPE )
2525 stdout , stderr = p .communicate ()
26- # it seems wkhtmltopdf's error codes can be false, we'll ignore them if we
27- # seem to have generated a pdf
28- if p .returncode != 0 and stdout [:4 ] != '%PDF' :
29- raise IOError ('error running wkhtmltopdf, command: %r\n response: "%s"' % \
30- (wk_args , stderr .strip (' \n ' )))
31- return stdout , stderr
26+ return stdout , stderr , p .returncode
3227
3328
3429def generate_pdf (source ,
@@ -95,20 +90,27 @@ def generate_pdf(source,
9590 else :
9691 cmd_args .extend ([arg_name , str (value )])
9792
98- def gen (src ):
93+ def gen_pdf (src , cmd_args ):
9994 with NamedTemporaryFile (suffix = '.pdf' , mode = 'rwb+' ) as pdf_file :
100- execute_wk (* (cmd_args + [src , pdf_file .name ]))
95+ cmd_args += [src , pdf_file .name ]
96+ _ , stderr , returncode = execute_wk (* cmd_args )
10197 pdf_file .seek (0 )
102- return pdf_file .read ()
98+ pdf_string = pdf_file .read ()
99+ # it seems wkhtmltopdf's error codes can be false, we'll ignore them if we
100+ # seem to have generated a pdf
101+ if returncode != 0 and pdf_string [:4 ] != '%PDF' :
102+ raise IOError ('error running wkhtmltopdf, command: %r\n response: "%s"' % \
103+ (cmd_args , stderr .strip (' \n ' )))
104+ return pdf_string
103105
104106 if is_url :
105- return gen (source )
107+ return gen_pdf (source , cmd_args )
106108
107109 with NamedTemporaryFile (suffix = '.html' , mode = 'w' ) as html_file :
108110 html_file .write (source .encode ('utf-8' ))
109111 html_file .flush ()
110112 html_file .seek (0 )
111- return gen (html_file .name )
113+ return gen_pdf (html_file .name , cmd_args )
112114
113115
114116def get_version ():
0 commit comments