如何让 WKHTMLTOPDF 在 Heroku 上工作?
How to get WKHTMLTOPDF working on Heroku?
我创建了一个使用 PDFKIT 生成 PDF 的网站,我知道如何在 Window 上安装和设置环境变量路径。我设法在 Heroku 上部署了我的第一个网站,但现在我在尝试生成 PDF 时遇到错误 "No wkhtmltopdf executable found: "b''"。
我不知道如何在 Heroku 上安装和设置 WKHTMLTOPDF 因为这是我第一次处理 Linux。
在问这个之前我真的尝试了一切,但即使遵循这个也不适合我。
如果可能,请指导我逐步安装和设置它。
我遵循了所有资源和所有内容,但无法使其发挥作用。每次我得到同样的错误。
我正在使用 Django 版本 2。Python 版本 3.7。
这就是我使用 heroku stack 得到的结果
可用堆栈
雪松14
容器
heroku-16
* heroku-18
错误,生成 PDF 时出现错误。
未找到 wkhtmltopdf 可执行文件:"b''"
如果此文件存在,请检查此进程是否可以读取它。否则请安装 wkhtmltopdf - https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf
我的网站在本地主机上运行良好,没有任何问题,据我所知,我确信我在安装 wkhtmltopdf 时做错了什么。
谢谢
非常重要。如果您想避免以下所有令人头疼的问题,您可以使用我的服务 api2pdf:https://github.com/api2pdf/api2pdf.python。否则,如果您想尝试解决它,请参阅下文。
1) 将此添加到您的 requirements.txt 以安装用于 heroku 和 pdfkit 的特殊 wkhtmltopdf 包。
git+git://github.com/johnfraney/wkhtmltopdf-pack.git
pdfkit==0.6.1
2) 我在我的烧瓶应用程序中创建了一个 pdf_manager.py。在 pdf_manager.py 我有一个方法:
def _get_pdfkit_config():
"""wkhtmltopdf lives and functions differently depending on Windows or Linux. We
need to support both since we develop on windows but deploy on Heroku.
Returns:
A pdfkit configuration
"""
if platform.system() == 'Windows':
return pdfkit.configuration(wkhtmltopdf=os.environ.get('WKHTMLTOPDF_BINARY', 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'))
else:
WKHTMLTOPDF_CMD = subprocess.Popen(['which', os.environ.get('WKHTMLTOPDF_BINARY', 'wkhtmltopdf')], stdout=subprocess.PIPE).communicate()[0].strip()
return pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_CMD)
我有平台声明的原因是我在 windows 机器上开发并且我的 PC 上有本地 wkhtmltopdf 二进制文件。但是当我部署到 Heroku 时,它在他们的 linux 容器中运行,所以我需要先检测我们在哪个平台上,然后再 运行 二进制文件。
3) 然后我创建了另外两种方法 - 一种将 url 转换为 pdf,另一种将原始 html 转换为 pdf。
def make_pdf_from_url(url, options=None):
"""Produces a pdf from a website's url.
Args:
url (str): A valid url
options (dict, optional): for specifying pdf parameters like landscape
mode and margins
Returns:
pdf of the website
"""
return pdfkit.from_url(url, False, configuration=_get_pdfkit_config(), options=options)
def make_pdf_from_raw_html(html, options=None):
"""Produces a pdf from raw html.
Args:
html (str): Valid html
options (dict, optional): for specifying pdf parameters like landscape
mode and margins
Returns:
pdf of the supplied html
"""
return pdfkit.from_string(html, False, configuration=_get_pdfkit_config(), options=options)
我使用这些方法转换为 PDF。
只需按照以下步骤在 Heroku 上部署 Django 应用程序 (pdfkit):
第 1 步::在 requirements.txt 文件
中添加以下包
wkhtmltopdf-pack==0.12.3.0
pdfkit==0.6.0
第 2 步: 在 views.py 添加以下行以添加二进制文件的路径
import os, sys, subprocess, platform
if platform.system() == "Windows":
pdfkit_config = pdfkit.configuration(wkhtmltopdf=os.environ.get('WKHTMLTOPDF_BINARY', 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'))
else:
os.environ['PATH'] += os.pathsep + os.path.dirname(sys.executable)
WKHTMLTOPDF_CMD = subprocess.Popen(['which', os.environ.get('WKHTMLTOPDF_BINARY', 'wkhtmltopdf')],
stdout=subprocess.PIPE).communicate()[0].strip()
pdfkit_config = pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_CMD)
第 3 步: 然后将 pdfkit_config 作为参数传递如下
pdf = pdfkit.from_string(html,False,options, configuration=pdfkit_config)
我创建了一个使用 PDFKIT 生成 PDF 的网站,我知道如何在 Window 上安装和设置环境变量路径。我设法在 Heroku 上部署了我的第一个网站,但现在我在尝试生成 PDF 时遇到错误 "No wkhtmltopdf executable found: "b''"。
我不知道如何在 Heroku 上安装和设置 WKHTMLTOPDF 因为这是我第一次处理 Linux。
在问这个之前我真的尝试了一切,但即使遵循这个也不适合我。
如果可能,请指导我逐步安装和设置它。
我遵循了所有资源和所有内容,但无法使其发挥作用。每次我得到同样的错误。 我正在使用 Django 版本 2。Python 版本 3.7。
这就是我使用 heroku stack 得到的结果
可用堆栈 雪松14 容器 heroku-16 * heroku-18
错误,生成 PDF 时出现错误。 未找到 wkhtmltopdf 可执行文件:"b''" 如果此文件存在,请检查此进程是否可以读取它。否则请安装 wkhtmltopdf - https://github.com/JazzCore/python-pdfkit/wiki/Installing-wkhtmltopdf
我的网站在本地主机上运行良好,没有任何问题,据我所知,我确信我在安装 wkhtmltopdf 时做错了什么。
谢谢
非常重要。如果您想避免以下所有令人头疼的问题,您可以使用我的服务 api2pdf:https://github.com/api2pdf/api2pdf.python。否则,如果您想尝试解决它,请参阅下文。
1) 将此添加到您的 requirements.txt 以安装用于 heroku 和 pdfkit 的特殊 wkhtmltopdf 包。
git+git://github.com/johnfraney/wkhtmltopdf-pack.git
pdfkit==0.6.1
2) 我在我的烧瓶应用程序中创建了一个 pdf_manager.py。在 pdf_manager.py 我有一个方法:
def _get_pdfkit_config():
"""wkhtmltopdf lives and functions differently depending on Windows or Linux. We
need to support both since we develop on windows but deploy on Heroku.
Returns:
A pdfkit configuration
"""
if platform.system() == 'Windows':
return pdfkit.configuration(wkhtmltopdf=os.environ.get('WKHTMLTOPDF_BINARY', 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'))
else:
WKHTMLTOPDF_CMD = subprocess.Popen(['which', os.environ.get('WKHTMLTOPDF_BINARY', 'wkhtmltopdf')], stdout=subprocess.PIPE).communicate()[0].strip()
return pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_CMD)
我有平台声明的原因是我在 windows 机器上开发并且我的 PC 上有本地 wkhtmltopdf 二进制文件。但是当我部署到 Heroku 时,它在他们的 linux 容器中运行,所以我需要先检测我们在哪个平台上,然后再 运行 二进制文件。
3) 然后我创建了另外两种方法 - 一种将 url 转换为 pdf,另一种将原始 html 转换为 pdf。
def make_pdf_from_url(url, options=None):
"""Produces a pdf from a website's url.
Args:
url (str): A valid url
options (dict, optional): for specifying pdf parameters like landscape
mode and margins
Returns:
pdf of the website
"""
return pdfkit.from_url(url, False, configuration=_get_pdfkit_config(), options=options)
def make_pdf_from_raw_html(html, options=None):
"""Produces a pdf from raw html.
Args:
html (str): Valid html
options (dict, optional): for specifying pdf parameters like landscape
mode and margins
Returns:
pdf of the supplied html
"""
return pdfkit.from_string(html, False, configuration=_get_pdfkit_config(), options=options)
我使用这些方法转换为 PDF。
只需按照以下步骤在 Heroku 上部署 Django 应用程序 (pdfkit):
第 1 步::在 requirements.txt 文件
中添加以下包wkhtmltopdf-pack==0.12.3.0
pdfkit==0.6.0
第 2 步: 在 views.py 添加以下行以添加二进制文件的路径
import os, sys, subprocess, platform
if platform.system() == "Windows":
pdfkit_config = pdfkit.configuration(wkhtmltopdf=os.environ.get('WKHTMLTOPDF_BINARY', 'C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'))
else:
os.environ['PATH'] += os.pathsep + os.path.dirname(sys.executable)
WKHTMLTOPDF_CMD = subprocess.Popen(['which', os.environ.get('WKHTMLTOPDF_BINARY', 'wkhtmltopdf')],
stdout=subprocess.PIPE).communicate()[0].strip()
pdfkit_config = pdfkit.configuration(wkhtmltopdf=WKHTMLTOPDF_CMD)
第 3 步: 然后将 pdfkit_config 作为参数传递如下
pdf = pdfkit.from_string(html,False,options, configuration=pdfkit_config)