我需要生成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中
答案 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
进行操作