如何在IIS 7.5上使用django-wkhtmltopdf生成pdf文件 [英] How generate a pdf file with django-wkhtmltopdf on IIS 7.5 - 8

查看:234
本文介绍了如何在IIS 7.5上使用django-wkhtmltopdf生成pdf文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用django-wkhtmltopdf在我的web应用程序中生成pdf,使用django集成服务器可以正常工作,但是当我使用IIS 7.5或8时出现此错误:WindowsError [错误6]句柄无效

I use django-wkhtmltopdf to generate pdfs in my webapp, Works fine using the django integrate server, but when I use IIS 7.5 or 8 gives me this error: WindowsError [Error 6] The handle is invalid

环境:

Request Method: GET
Request URL: http://127.0.0.1:8006/blabla/pdf/10/

Django Version: 1.8.5
Python Version: 2.7.10
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'NuevoTicket',
 'crispy_forms',
 'wkhtmltopdf',
 'ckeditor',
 'ckeditor_uploader')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  164.                 response = response.render()
File "C:\Python27\lib\site-packages\django\template\response.py" in render
  158.             self.content = self.rendered_content
File "C:\Python27\lib\site-packages\wkhtmltopdf\views.py" in rendered_content
  78.             cmd_options=cmd_options
File "C:\Python27\lib\site-packages\wkhtmltopdf\utils.py" in render_pdf_from_template
  159.                               cmd_options=cmd_options)
File "C:\Python27\lib\site-packages\wkhtmltopdf\utils.py" in convert_to_pdf
  121.     return wkhtmltopdf(pages=[filename], **cmd_options)
File "C:\Python27\lib\site-packages\wkhtmltopdf\utils.py" in wkhtmltopdf
  109.     return check_output(ck_args, **ck_kwargs)
File "C:\Python27\lib\subprocess.py" in check_output
  566.     process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "C:\Python27\lib\subprocess.py" in __init__
  702.          errread, errwrite), to_close = self._get_handles(stdin, stdout, stderr)
File "C:\Python27\lib\subprocess.py" in _get_handles
  857.                 errwrite = _subprocess.GetStdHandle(_subprocess.STD_ERROR_HANDLE)

Exception Type: WindowsError at /blabla/pdf/10/
Exception Value: 6 The handle is invalid

推荐答案

最后,感谢n1b0r .我必须像这样更新python27/lib/subprocess.py中的check_out方法

Finally got it, thank's to n1b0r. I have to update the check_out method in python27/lib/subprocess.py like this

来自:

if 'stdout' in kwargs:
    raise ValueError('stdout argument not allowed, it will be overridden.')
process = Popen(stdout=PIPE, *popenargs, **kwargs)

收件人:

if 'stdout' in kwargs:
        raise ValueError('stdout argument not allowed, it will be overridden.')
kwargs.pop('stderr', None)
process = Popen(stdout=PIPE, stderr=PIPE, stdin=PIPE, *popenargs, **kwargs)

这使得它可以在IIS中工作,但是如果使用django集成服务器,则会出现错误.

That make it works in IIS but gives an error if use the django integrate server.

这篇关于如何在IIS 7.5上使用django-wkhtmltopdf生成pdf文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆