I am returning with a new question that I cannot answer by scratching my head all day on it.
I want to create a PDF file from a web page by clicking the "Download PDF" button. I tried several modules, including Reportlab and XHTML2PDF, but I cannot create any PDF file and not load it ... Here is what I did with Reportlab, following Render HTML to PDF on the Django website
- views.py -
import cStringIO as StringIO import ho.pisa as pisa from django.template.loader import get_template from django.template import Context from django.http import HttpResponse from cgi import escape def index_data(request): #Code to generate data return render(request, "analytics/stat.html", locals()) return render_to_pdf( 'analytics/stat.html', { 'pagesize':'A4', 'mylist': results, } ) def render_to_pdf(template_src, context_dict): template = get_template(template_src) context = Context(context_dict) html = template.render(context) result = StringIO.StringIO() pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result) if not pdf.err: return HttpResponse(result.getvalue(), content_type='application/pdf') return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))
- urls.py -
from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^$', "analytics.views.main_page", name="main_page"), url(r'^portail/$', "analytics.views.index_data", name="index"), url(r'^generate_pdf/$', "analytics.views.GroupPDFGenerate.as_view()", name="generate_pdf")
]
- Template analytics /stat.html -
{% extends "analytics/layout.html" %} {% block title %} Audience {% endblock title %} {% block head %} # Script to generate google charts {% endblock head %} {% block body %} <div class="page-header"> <h1 align="center"> Audience </h1> </div> <div class="row"> <div class="col-md-1"> <h3 align="center"><a href="/logout/">Logout</a></h3> <h3 align="center"><a href="statistiques.pdf">Download pdf</a></h3> </div> </div> {% endblock %}
Also, is there a better module to handle?