在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自己建造的过程。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何使用JSON将值从安卓 java类传递到php?   Java MySQL语法错误不会消失   java Android应用程序无法启动活动   bytebuffer在Java中从字节解码实数   java我无法在php中解码json对象   Swing中的JavaFX集成   java如何在JPA实体bean中使用或注释虚拟字段,该字段不应持久化到数据库中   来自另一个活动的java访问方法   java Tapestry动态生成图像   java有没有一种正则表达式方法可以将一组字符替换为另一组字符(比如shell tr命令)?   java通过转换gson将一些特定的表导出为文件   用java格式化字符串并写入文件   Java使用Graphics2D矩形在面板中创建2D平铺贴图?