在Django中从http请求生成PDF

时间:2017-07-31 15:27:18

标签: python django pdf

我需要生成pdf用于报告目的。前端将在http请求中以[标题,文件类型,数据]的格式向我发送json列表(动态,可能只有一个项目,或N个项目)。

[ ["Confusion Matrix", "img", "#image data in 64 bits encode"] , ["Graph1", "img", "#image data in 64 bits encode"] ]

在我看来,在接受请求之后,我应该如何将它们逐个转换为http格式并将它们附加到一个大的http模板中以生成pdf?我正在尝试使用django模板,但我想知道是否有更优雅的解决方案。我在前端采用文件类型的原因是图像数据将以64位编码,文本数据将存储在存储Web服务的txt中

3 个答案:

答案 0 :(得分:2)

我认为你实际上有两个问题:1 - 如何在python中处理json数据,2-如何从模板中生成pdf(如果我错了,请纠正我)

我要在这里回答第二个问题。在网上搜索第一个;)

在json转换后,您可以将转换后的数据发送到html模板并使用pdfkit生成pdf。

template = get_template("app_name/template.html")
context = Context({'data1':value1, 'data2':valu2})
html = template.render(context)
pdf = pdfkit.from_string(html, False)
response = HttpResponse(pdf, content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename=output.pdf'
return response

答案 1 :(得分:0)

作为替代解决方案,您可以尝试wkhtmltopdf https://github.com/incuna/django-wkhtmltopdf。用法很简单。您应该将所需的布局构建为一个简单的HTML模板,并将其提供给PDFTemplateView,然后将其作为响应呈现为pdf文件。

from django.conf.urls.defaults import url
from wkhtmltopdf.views import PDFTemplateView

urlpatterns = patterns('',
    url(r'^pdf/$', PDFTemplateView.as_view(template_name='my_template.html',
        filename='my_pdf.pdf'), name='pdf'),
)

答案 2 :(得分:0)

要根据要求生成PDF,您还可以使用WeasyPrint。您可以按照Tutorial

进行操作