Weasyprint pdf生成太长,使下载变得不可能。如何传播其创作?

时间:2017-01-18 15:57:49

标签: python django weasyprint

我一直在成功使用Weasyprint进行pdf生成,直到达到一定规模,这是我的应用程序的一个常见用例,其中pdf生成需要很长时间(超过10秒)才能破坏与浏览器的连接,并且下载是不可能的。

我想我必须流式传输文件并返回一个django StreamingHttpResponse(同意?)。我不会预处理pdf,因为它是由用户经常添加或删除项目的篮子组成的。

如何使用weasyprint流式传输文件?即使我在部分中剪切了sourceHtml字符串,如何逐步编写pdf?

我渲染一个django模板并从中生成pdf:

from weasyprint import HTML

sourceHtml = template.render(my-objects)
outhtml = HTML(string=sourceHtml).write_pdf()

response = HttpResponse(outhtml, content_type='application/pdf')
response['Content-Disposition'] = u'attachment; filename="{}.pdf"'.format(name)

还是有另一种方法可以解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我在问题跟踪器上询问:https://github.com/Kozea/WeasyPrint/issues/416

这是不可行的,建议的解决方法是

  

将下载分为两个步骤:一个路由异步生成文档并将其存储在文件系统中,第二个路径下载生成的文档。当尚未生成文档时,您可以隐藏第二个链接并显示“尚未生成文档”之类的内容。