2017-07-31 95 views
1

我需要生成用于报告目的的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位和文本数据将被存储在存储网络服务

+0

您是否尝试过使用ReportLab? Django文档建议使用:https://docs.djangoproject.com/en/1.11/howto/outputting-pdf/ –

回答

0

一个txt作为替代解决方案进行编码,你可以尝试wkhtmltopdfhttps://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'), 
) 
0

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

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