从Django中的http请求生成PDF
问题描述:
我需要生成用于报告目的的pdf。前端将在http请求中以[标题,文件类型,数据]的格式向我发送json列表的列表(动态,可能只有一个项目,或N个项目)。从Django中的http请求生成PDF
[ ["Confusion Matrix", "img", "#image data in 64 bits encode"] , ["Graph1", "img", "#image data in 64 bits encode"] ]
在我看来,接受请求后,我应该如何转换他们到HTTP格式逐一把它们添加到一个大的HTTP模板来生成PDF?我试图用Django模板,但我想知道是否有更优雅的解决方案。我走在前端的文件类型的原因是由于图像数据将与64位和文本数据将被存储在存储网络服务
答
一个txt作为替代解决方案进行编码,你可以尝试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'),
)
答
我想你实际上有两个问题: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
您是否尝试过使用ReportLab? Django文档建议使用:https://docs.djangoproject.com/en/1.11/howto/outputting-pdf/ –