为什么在通过 python-pdfkit 调用时会出现 wkhtmltopdf IO 错误?
Why am I getting wkhtmltopdf IO Error when invoking via python-pdfkit?
我正在尝试将我的 wkhtmltopdf
软件包升级到 0.12.2.1
,但没有成功。
- 它在更新之前确实有效。我尝试更新的原因是
修复 PDF 页面之间的内容拆分。
- 我是 运行 - Ubuntu 64x - 值得信赖
- 我正在通过 python-pdfkit 使用。
- 我开始获取最新版本的
wkhtmltopdf
http://sourceforge.net/projects/wkhtmltopdf/files/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb/download?use_mirror=hivelocity
以下是我目前 done/tried 的内容。有没有人有幸更新他们的设置?或者任何指针都会非常有帮助!谢谢!
开箱即用 Configuration Error
我硬编码只是为了克服这个问题。
# -*- coding: utf-8 -*-
import subprocess
import sys
class Configuration(object):
def __init__(self, wkhtmltopdf='', meta_tag_prefix='pdfkit-'):
self.meta_tag_prefix = meta_tag_prefix
self.wkhtmltopdf = wkhtmltopdf
if not self.wkhtmltopdf:
if sys.platform == 'win32':
self.wkhtmltopdf = subprocess.Popen( ['where', 'wkhtmltopdf'], stdout=subprocess.PIPE).communicate()[0].strip()
else:
self.wkhtmltopdf = subprocess.Popen( ['which', 'wkhtmltopdf'], stdout=subprocess.PIPE).communicate()[0].strip()
try:
#with open(self.wkhtmltopdf) as f:
with open("/usr/local/bin/wkhtmltopdf") as f:
pass
except IOError:
raise IOError('No wkhtmltopdf executable found: "%s"\n'
'If this file exists please check that this process can '
'read it. Otherwise please install wkhtmltopdf - '
'https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf' % self.wkhtmltopdf)
现在我遇到了这个错误,不知道如何继续。我尝试将 shell=True
添加到上面的 Popen 中,但这也不起作用。
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 543, in perform_job
rv = job.perform()
File "/usr/local/lib/python2.7/dist-packages/rq/job.py", line 490, in perform
self._result = self.func(*self.args, **self.kwargs)
File "/home/worker-1/Desktop/Dropbox/changeaddress/facts/jobs.py", line 864, in job_sharepdfs
mymovepdf_link = build_mymovepdf(account_uuid, addresschange_uuid)
File "/home/worker-1/Desktop/Dropbox/changeaddress/facts/jobs.py", line 608, in build_mymovepdf
s3file = pdfkit.from_string( output.getvalue() , False )
File "/usr/local/lib/python2.7/dist-packages/pdfkit/api.py", line 68, in from_string
return r.to_pdf(output_path)
File "/usr/local/lib/python2.7/dist-packages/pdfkit/pdfkit.py", line 93, in to_pdf
stderr=subprocess.PIPE)
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
您必须设置 wkhtmltopdf
库的 configuration
(路径)。
我创建了一个如下所示的基本辅助函数,
import os
import pdfkit
WKHTMLTOPDF_PATH = '/usr/local/bin/wkhtmltopdf'
def generate_pdf(html, static_path, _path):
config = pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_PATH)
_status = pdfkit.from_string(
html,
os.path.join(static_path, _path),
configuration=config,
options={
'page-size': 'A4',
'margin-top': '0',
'margin-right': '0',
'margin-left': '0',
'margin-bottom': '0',
'zoom': '1.2',
'encoding': "UTF-8",
})
return _path if _status else ''
使用:
html = "<h1>Hello World !!!</h1>"
static_path = "/static/"
file_path = "pdfs/out.pdf"
generate_pdf(html, static_path, file_path)
另一个解决方案(安装wkhtmltopdf
):
wget http://download.gna.org/wkhtmltopdf/0.12/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
tar xvf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
sudo mv wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf
sudo chmod +x /usr/local/bin/wkhtmltopdf
我正在尝试将我的 wkhtmltopdf
软件包升级到 0.12.2.1
,但没有成功。
- 它在更新之前确实有效。我尝试更新的原因是 修复 PDF 页面之间的内容拆分。
- 我是 运行 - Ubuntu 64x - 值得信赖
- 我正在通过 python-pdfkit 使用。
- 我开始获取最新版本的
wkhtmltopdf
http://sourceforge.net/projects/wkhtmltopdf/files/0.12.2.1/wkhtmltox-0.12.2.1_linux-trusty-amd64.deb/download?use_mirror=hivelocity
以下是我目前 done/tried 的内容。有没有人有幸更新他们的设置?或者任何指针都会非常有帮助!谢谢!
开箱即用 Configuration Error
我硬编码只是为了克服这个问题。
# -*- coding: utf-8 -*-
import subprocess
import sys
class Configuration(object):
def __init__(self, wkhtmltopdf='', meta_tag_prefix='pdfkit-'):
self.meta_tag_prefix = meta_tag_prefix
self.wkhtmltopdf = wkhtmltopdf
if not self.wkhtmltopdf:
if sys.platform == 'win32':
self.wkhtmltopdf = subprocess.Popen( ['where', 'wkhtmltopdf'], stdout=subprocess.PIPE).communicate()[0].strip()
else:
self.wkhtmltopdf = subprocess.Popen( ['which', 'wkhtmltopdf'], stdout=subprocess.PIPE).communicate()[0].strip()
try:
#with open(self.wkhtmltopdf) as f:
with open("/usr/local/bin/wkhtmltopdf") as f:
pass
except IOError:
raise IOError('No wkhtmltopdf executable found: "%s"\n'
'If this file exists please check that this process can '
'read it. Otherwise please install wkhtmltopdf - '
'https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf' % self.wkhtmltopdf)
现在我遇到了这个错误,不知道如何继续。我尝试将 shell=True
添加到上面的 Popen 中,但这也不起作用。
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/rq/worker.py", line 543, in perform_job
rv = job.perform()
File "/usr/local/lib/python2.7/dist-packages/rq/job.py", line 490, in perform
self._result = self.func(*self.args, **self.kwargs)
File "/home/worker-1/Desktop/Dropbox/changeaddress/facts/jobs.py", line 864, in job_sharepdfs
mymovepdf_link = build_mymovepdf(account_uuid, addresschange_uuid)
File "/home/worker-1/Desktop/Dropbox/changeaddress/facts/jobs.py", line 608, in build_mymovepdf
s3file = pdfkit.from_string( output.getvalue() , False )
File "/usr/local/lib/python2.7/dist-packages/pdfkit/api.py", line 68, in from_string
return r.to_pdf(output_path)
File "/usr/local/lib/python2.7/dist-packages/pdfkit/pdfkit.py", line 93, in to_pdf
stderr=subprocess.PIPE)
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
您必须设置 wkhtmltopdf
库的 configuration
(路径)。
我创建了一个如下所示的基本辅助函数,
import os
import pdfkit
WKHTMLTOPDF_PATH = '/usr/local/bin/wkhtmltopdf'
def generate_pdf(html, static_path, _path):
config = pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_PATH)
_status = pdfkit.from_string(
html,
os.path.join(static_path, _path),
configuration=config,
options={
'page-size': 'A4',
'margin-top': '0',
'margin-right': '0',
'margin-left': '0',
'margin-bottom': '0',
'zoom': '1.2',
'encoding': "UTF-8",
})
return _path if _status else ''
使用:
html = "<h1>Hello World !!!</h1>"
static_path = "/static/"
file_path = "pdfs/out.pdf"
generate_pdf(html, static_path, file_path)
另一个解决方案(安装wkhtmltopdf
):
wget http://download.gna.org/wkhtmltopdf/0.12/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
tar xvf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
sudo mv wkhtmltox/bin/wkhtmltopdf /usr/local/bin/wkhtmltopdf
sudo chmod +x /usr/local/bin/wkhtmltopdf