在heroku上为python提供wkhtmltoppdf
pywkher-new-params的Python项目详细描述
wkhtmltopdf是一个命令行程序,它使用 webkit呈现引擎,由Qt提供。因为它使用webkit, 您可以使用wkhtmltopf生成屏幕截图,或从 django或rails或其他什么,生成的pdf将看起来非常棒。
典型的安装过程包括下载和编译qt, 然后下载并安装wkhtmltopf。
但是您不能在Heroku中下载和编译包 dyno,所以您需要在任何外部二进制文件中提供您可能要使用的 (这不是自行编译的python包)。这个包裹 提供一种简单的方法来包含和使用wkhtmltopf二进制文件 为Heroku(Cedar Stack)Dyno环境编译。
安装
按常规方式安装:
pip install pywkher
用法
在python程序中使用wkhtmltopf的一个简单方法是使用 包含generate_pdf命令。generate_pdf命令接受 url或html文档并返回python namedtemporaryfile对象 引用生成的pdf(它将存储在heroku实例的 临时目录)。
下面是使用generate_pdf命令呈现django模板的示例 作为pdf并返回结果pdf作为http响应的一部分:
from os.path import basename from wsgiref.util import FileWrapper from django.http import HttpResponse from django.template import RequestContext from django.template.loader import get_template from pywkher import generate_pdf def return_a_pdf(request): template = get_template('my_awesome_template.html') html = template.render(RequestContext(request)) pdf_file = generate_pdf(html=html) response = HttpResponse(FileWrapper(pdf_file), content_type='application/pdf') response['Content-Disposition'] = 'attachment; filename=%s.zip' % basename(pdf_file.name) response['Content-Length'] = pdf_file.tell() pdf_file.seek(0) return response
开发中的使用
如果你想在本地测试你的应用程序,显然 因为heroku是行不通的,除非你的开发或测试环境 与heroku的非常相似。但是,generate函数将查找 名为WKHTMLTOPDF_CMD的环境变量将只使用 如果未设置环境变量,则在内部绑定WKHTMLTOPDF二进制文件。
因此,如果您使用的是Mac,请执行以下操作:
- brew install wkhtmltopdf(此操作需要Homebrew)
- export WKHTLMTOPDF_CMD=wkhtmltopdf
- python my_python_program.py(仅举个例子)
致谢
Brad Phelan生成了包含在这里的二进制文件 wkhtmltopdf-heroku宝石。多亏了他的努力我才没有 去经历整个Heroku Vulcan自己建造的过程。