这是我的第一个问题,所以请原谅我,如果我忘了说什么或者有什么问题的话:)
我在IIS(10)-Windows Server上设置了一个python(3.5.3)-django(2.1.5)-project。一切都很好。
只有wkhtmltopdf(0.12.5)有奇怪的行为。
当我在本地主机上运行它时,命令提示符会给我
Loading pages (1/6)
Counting pages (2/6)
Resolving links (4/6)
Loading headers and footers (5/6)
Printing pages (6/6)
Done
我可以按预期在我的下载文件夹中找到生成的.pdf文件。
当我将<code>ALLOWED_HOSTS</code>更改为服务器的IP并调用url生成pdf时,它表示有一个
OSError在 /pdf/
[赢错误6]句柄无效
通过追溯:
inner 34中的文件“C:\ my _ project \ myenv \ lib \ site-packages \ django \ core \ handlers \ exception . py”。响应= get_response(请求)
文件“C:\ my _ project \ myenv \ lib \ site-packages \ django \ core \ handlers \ base . py”in _ get _ response 156。response = self . process _ exception _ by _ middleware(e,请求)
文件“C:\ my _ project \ myenv \ lib \ site-packages \ django \ core \ handlers \ base . py”in _ get _ response 154。response = response.render()
render 106中的文件“C:\ my _ project \ myenv \ lib \ site-packages \ django \ template \ response . py”。self . content = self . rendered _ content
rendered_content 80 中的文件“C:\my_project\myenv\lib\site-packages\wkhtmltopdf\views.py”。cover_template=self.resolve_template(self.cover_template)
文件"C:\my_project\myenv\lib\site-pack\wkhtmltopdf\utils.py"在render_pdf_from_template237.cover_filename=cover.filename如果覆盖其他无)
文件"C:\my_project\myenv\lib\site-pack\wkhtmltopdf\utils.py"在convert_to_pdf166.返回wkhtmltopdf(页面=页面,**cmd_options)
wkhtmltopdf 147中的文件“C:\ my _ project \ myenv \ lib \ site-packages \ wkhtmltopdf \ utils . py”。返回check_output(ck_args,**ck_kwargs)
check_output 316中的文件“C:\ Program Files \ python 35 \ lib \ subprocess . py”。* *夸脱)。标准输出
运行383中的文件“C:\Program Files\Python35\lib\subprocess.py”,使用Popen(*popenargs,**kwargs)作为进程:
文件"C:\Program Files\Python35\lib\subprocess.py"在init 640. errread, errwrite)=self._get_handles(stdin, stdout, stderr)
_get_handles 884 中的文件“C:\程序文件\Python35\lib\subprocess.py”。错误写入 = _winapi。GetStdHandle(_winapi.STD_ERROR_HANDLE)
异常类型:OSError at/pdf/异常值:[WinError 6]Das Handle ist ungültig
我可以看到在C:\User\myappationpool\AppData\Local\Temp
-文件夹中,wkhtmltopdf正在生成一个. html-文件,称为例如wkhtmltopdfgn1s7k5r.html
,但不知何故进度被卡住了。
正如这里和这里提到的,其他人也有同样的问题。但是正在改变
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)
没有效果。我认为这个解决方案只适用于子流程。py文件,我使用的是Python 3,该文件的功能已更改。
我授予了IUSR
的完全权限
有人知道我能做些什么来帮助我吗?
这个问题真的存在于wkhtmltopdf的子流程中吗
为什么当我在本地服务器上运行它时,它localhost没有任何问题,但当我通过服务器的IP调用页面时,它就不工作了?-如前所述:其他一切都很好。
我添加了 wkhtmltopdf 到INSTALLED_APPS
,并像这样设置它:
settings.py
WKHTMLTOPDF_CMD = 'C:/wkhtmltopdf/bin/wkhtmltopdf'
(正如我还读到的那样,当它安装在'Program Files'
中时,由于路径中的空格,经常会出现问题。)
urls.py
path('pdf/', views.MyPDFView.as_view(), name='pdfview'),
views.py
from wkhtmltopdf.views import PDFTemplateResponse
class MyPDFView(View):
template_name='mypdfview.html'
def get(self, request):
response = PDFTemplateResponse(request=self.request,
template=self.template_name,
filename='hello' + '.pdf',
context=self.context,
show_content_in_browser=False,
cmd_options={
'margin-top': 50,
},
)
return response
我的视野.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Hello World</title>
</head>
<body>
<h1>Some headline here.</h1>
</body>
</html>
编辑1:不知怎的,我的问候消失了-添加了它…编辑2:似乎我不被允许说:“大家好”!?
要执行与 python 2.7 相同的解决方法,您需要编辑 wkhtmltopdf/utils.py文件, 方法 wkhtmltopdf()
:
from .subprocess import check_output, PIPE
...
def wkhtmltopdf(pages, output=None, **kwargs):
...
except (AttributeError, IOError):
# can't call fileno() on mod_wsgi stderr object
pass
# add this:
if not ck_kwargs.get('stderr'):
ck_kwargs['stderr'] = PIPE
return check_output(ck_args, **ck_kwargs)
我使用django wkhtmltopdf在我的webapp中生成pdf,使用djang o集成服务器可以正常工作,但当我使用IIS 7.5或8时,会出现以下错误:WindowsError[error 6]句柄无效 环境:
问题内容: 我正在尝试自己学习编程,但仍在尝试掌握它。我收到以下错误: java.io.IOException:句柄无效 这是我的代码 我相信,每当我调用该方法时,都会出现错误,当我尝试显示默认构造函数中的字节数时,它可以很好地工作并显示。 问题答案: 好了,在实际开始使用它之前,请先关闭构造函数的块。将结束部分从构造函数中移到完成后将被调用的位置,例如在main 下方调用或单独的close方法。
在书写代码与阅读代码的时候,经常会看到这一句代码: typedef void *HANDLE ,它是何方神圣呢?如何理解呢? 不理解它的时候,感觉它很神奇,知道它以后,它就是个typedef的定义,只不过是void*类型罢了,也就是HANDLE等价于void *,我们可以叫它披着句柄皮的指针(PS:指针和句柄是有区别的,在这说句废话); 对于void* 神通广大,因为它作为函数参数or函数返回值,
你可以创建任何MATLAB函数的句柄,然后用这些句柄作为函数链接的途径。函数句柄主要用来传递自变量列表给其他函数,用句柄执行函数或求值。 在MATLAB中,通过在函数名前加上符号@构造函数句柄。下面例子为SIN函数创建一个函数句柄,然后赋值给变量fhandle: fhandle = @sin; 用MATLAB的fevel函数对函数句柄求值。下面的plot_fhandle函数接收一个函数句柄和数据
我试图用这个库创建一个pdf,实现最简单的de docs示例 使用url并直接从模板中呈现,如下所示 这是模板文件的 html 但是当我尝试访问url时,错误是这样的 /pdf/“NoneType”对象处的AttributeError没有属性“endswith” 我如何能修理它 这是回溯 回溯:get_response139.response=response中的文件“/usr/local/lib
当你用作图命令时,MATLAB用多种图形对象创建图形,例如线,文本,表面(完整列表见Graphics Objects)。所有图形对象都有控制其性能的属性。你可以在MATLAB中询问每种属性的取值并设置大部分的属性值。 每当MATLAB创建一个图形对象时,它就给该对象赋以一个标识符(称为句柄)。可以用此句柄访问对象属性。若你想作下列操作,句柄图形很有用。 修改图形外观。 通过编写能直接创建和操作对象