2017-07-31 84 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