我一直在成功使用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)
还是有另一种方法可以解决这个问题吗?
谢谢!
答案 0 :(得分:0)
我在问题跟踪器上询问:https://github.com/Kozea/WeasyPrint/issues/416
这是不可行的,建议的解决方法是
将下载分为两个步骤:一个路由异步生成文档并将其存储在文件系统中,第二个路径下载生成的文档。当尚未生成文档时,您可以隐藏第二个链接并显示“尚未生成文档”之类的内容。