Python3 Django->;HTML到PDF

Python3 Django->;HTML到PDF,python,django,pdf,html-to-pdf,Python,Django,Pdf,Html To Pdf,在python2中,从django网页生成PDF有很多不同的方法。最干净的可能是pisa和reportlab。 但这些不适用于python3 到目前为止,我唯一成功使用的方法是呈现模板,将其写入文件,然后通过subprocess.popen使用wkhtmltopdf。这工作正常,但它不会加载我的任何静态文件,如css和图像 有什么合适的解决办法吗?wkhtmltopdf可以通过某种方式从命令行读取我的静态文件吗?或者是否有一个像pisa/reportlab这样的库,它支持python3 我还没有

在python2中,从django网页生成PDF有很多不同的方法。最干净的可能是pisa和reportlab。 但这些不适用于python3

到目前为止,我唯一成功使用的方法是呈现模板,将其写入文件,然后通过subprocess.popen使用wkhtmltopdf。这工作正常,但它不会加载我的任何静态文件,如css和图像

有什么合适的解决办法吗?wkhtmltopdf可以通过某种方式从命令行读取我的静态文件吗?或者是否有一个像pisa/reportlab这样的库,它支持python3

我还没有找到这样一个你可以使用的图书馆。您可以轻松地直接渲染

你可以这样做:

    html = HTML(string=htmlstring)
    main_doc = html.render()
    pdf = main_doc.write_pdf()
    return HttpResponse(pdf, content_type='application/pdf')
要将Django视图呈现为HTML,只需使用快捷方式
render_To_string(self.template_name,context,context_instance=RequestContext(self.request))

请注意,在同步Webserver/WSGI服务器上使用此选项时,在呈现PDF之前,所有请求都将被阻止。因此考虑使用异步工作器。

WKHTMLTPPDF需要

  • CSS将被内联
  • 服务器上本地存在的静态文件
  • 静态文件URL是操作系统路径,例如:
    /home/ubuntu/project/project/static/file\u name

我研究了Weasyprint、wkhtmltopdf甚至LaTeX,但它们都有外部二进制依赖项,很难部署到Heroku等服务中

到目前为止,我发现在Python3上的Django中工作的最佳组合是使用Reportlab(现在在Python3上工作)+。xhtml2pdf最近才添加了beta Python 3支持,因此您需要使用以下工具安装它:

pip install --pre xhtml2pdf
如果已经安装了这两个模板,则可以直接使用xhtml2pdf,也可以安装软件包,该软件包提供一个要继承的TemplateView和一个示例基本模板&样式,让您快速入门。按照他们的快速入门说明,您可以快速准备一些细节视图,以呈现为PDF格式,如:

class InvoicePDFView(PDFTemplateView):
    template_name = "invoice_pdf.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        myinstance = get_object_or_404(MyModel, pk=context['pk'])
        context['myinstance'] = myinstance
        return context
在您的url.py中,您可以添加如下内容:

url(r'invoice/(?P<pk>[^/]+)/$', InvoicePDFView.as_view(), name='invoice')
url(r'invoice/(?P[^/]+)/$”,InvoicePDFView.as_view(),name='invoice')
我试过Python3,效果很好

pip install python-pdf
对于
python2
使用
pip安装python pdf==0.30.0


文档

谢谢您!它没有出现在我的任何搜索中,但它工作得非常完美。安装它花了一点力气,因为它需要一些非python库,但我成功了。感谢bunchI尝试使用Weasyprint,它与Python3一起工作,但它消耗了大量内存——从不到1M的html生成PDF需要5亿。