当前位置: 首页 > 知识库问答 >
问题:

如何在IIS 7.5-8上使用django wkhtmltopdf生成pdf文件

徐鑫鹏
2023-03-14

我使用django wkhtmltopdf在我的webapp中生成pdf,使用djang o集成服务器可以正常工作,但当我使用IIS 7.5或8时,会出现以下错误:WindowsError[error 6]句柄无效

环境:

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

共有2个答案

司空叶五
2023-03-14

我以前也有同样的问题。将quiet选项添加到pdfkit中,并尝试从pdfkit中修改configuration.py文件

options = {'quiet': ''}
pdfkit.from_file('in.html', 'out.pdf',options = options)

配置.py

由此:

self.wkhtmltopdf = subprocess.Popen(['where','wkhtmltopdf'],stdout=subprocess.PIPE).communicate()[0].strip()

收件人:

self.wkhtmltopdf = subprocess.Popen(['which','wkhtmltopdf'],stdin=subprocess.PIPE,stderr=subprocess.PIPE, stdout=subprocess.PIPE).communicate()[0].strip()
拓拔迪
2023-03-14

终于懂了,感谢n1b0r。我必须像这样更新python27/lib/subprocess.py中的check_out方法

从:

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集成服务器,则会出现错误。

 类似资料:
  • 我有一个问题,生成一个分层的pdf页面使用PDFbox。我在这里看到过几篇关于这个主题的文章,但它们都集中在将页面从另一个pdf导入到目标文档中。 我创建了一个类MapImage,它包含纸张大小(以像素为单位)和一个我想要添加到单个pdf页面的BufferedImages列表。 不幸的是,生成的PDF已损坏。我试图创建一个页面,只有一个图像(没有图层),但不幸的是,我不知道如何做到这一点。 有人遇

  • 问题内容: 我试图将XML数据从网页转换为PDF文件,希望能完全在JavaScript中完成。我需要能够绘制文本,图像和简单形状。我希望能够完全在浏览器中做到这一点。 问题答案: 示例创建一个“ Hello World” PDF文件。

  • 在我的项目中,我需要在Apache pdfbox api的帮助下生成发票。到目前为止,我可以在生成的pdf中插入图像、文本,但在生成表格时发现困难。我甚至找不到一个示例模板。如果有人有,请提供链接。 注意:我不必使用iText 提前感谢

  • 我想从HTML模板中提取一部分,并将其转换为PDF文件,以便用户可以选择下载。(例如,单击按钮后)。 我找到了一个名为jsPDF的库,我将如何在Angular2应用程序(RC4)中使用jsPDF? 谢谢你

  • 有没有一个包生成PDF(与样式)从网页与拉维勒。我尝试使用barryvdh/laravel-dompdf,但是PDF没有样式化。Laravel有没有更好的解决方案

  • “我想下载一个从基于spring的restful web服务发送的.pdf文件到我的angular应用程序。如何下载,我的angular应用程序或Spring Boot上是不是缺少了一些代码?” 我正在从angular 6应用程序向spring-boot服务器发送一个HTTP GET请求,该服务器生成一个.pdf文件,然后将这个.pdf文件作为blob发送给我,但当我试图在angular侧创建一个