From: Guillaume Pellerin Date: Wed, 3 Feb 2016 23:15:50 +0000 (+0100) Subject: add pdf response functions X-Git-Tag: 1.1~137 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=8835587c43207613cc632e5449b9d1dbe051fa7b;p=teleforma.git add pdf response functions --- diff --git a/teleforma/templates/registration/registration_pdf.html b/teleforma/templates/registration/registration_pdf.html index 8d47c789..f826136c 100644 --- a/teleforma/templates/registration/registration_pdf.html +++ b/teleforma/templates/registration/registration_pdf.html @@ -44,9 +44,9 @@ Je certifie avoir pris connaissance des conditions générales d’inscription et du règlement intérieur. - A ...................................., le ....................................... +

A ...................................., le .......................................


- Signature +

Signature

diff --git a/teleforma/urls.py b/teleforma/urls.py index 2a449819..d66ad50c 100644 --- a/teleforma/urls.py +++ b/teleforma/urls.py @@ -58,7 +58,7 @@ urlpatterns = patterns('', # (r'^accounts/register0/$', RegistrationView.as_view(), {'form_class':CustomRegistrationForm}), url(r'^accounts/register/$', UserAddView.as_view(), name="teleforma-register"), url(r'^accounts/complete/$', UserCompleteView.as_view(), name="teleforma-register-complete"), - url(r'^accounts/register/(?P.*)/download/$', RegistrationPDFViewDowload.as_view(), + url(r'^accounts/register/(?P.*)/download/$', RegistrationPDFViewDownload.as_view(), name="teleforma-registration-download"), url(r'^captcha/', include('captcha.urls')), diff --git a/teleforma/views/core.py b/teleforma/views/core.py index c31b6571..11cb9a96 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -191,6 +191,42 @@ def get_default_period(periods): return Period.objects.get(id=getattr(settings, 'TELEFORMA_PERIOD_DEFAULT_ID', 1)) +def content_to_pdf(content, dest, encoding='utf-8', **kwargs): + """ + Write into *dest* file object the given html *content*. + Return True if the operation completed successfully. + """ + from xhtml2pdf import pisa + src = StringIO(content.encode(encoding)) + pdf = pisa.pisaDocument(src, dest, encoding=encoding, **kwargs) + return not pdf.err + +def content_to_response(content, filename=None): + """ + Return a pdf response using given *content*. + """ + response = HttpResponse(content, mimetype='application/pdf') + if filename is not None: + response['Content-Disposition'] = 'attachment; filename=%s' % filename + return response + +def render_to_pdf(request, template, context, filename=None, encoding='utf-8', + **kwargs): + """ + Render a pdf response using given *request*, *template* and *context*. + """ + if not isinstance(context, Context): + context = RequestContext(request, context) + + content = loader.render_to_string(template, context) + buffer = StringIO() + + succeed = content_to_pdf(content, buffer, encoding, **kwargs) + if succeed: + return content_to_response(buffer.getvalue(), filename) + return HttpResponse('Errors rendering pdf:
%s
' % escape(content)) + + class HomeRedirectView(View): def get(self, request): diff --git a/teleforma/views/crfpa.py b/teleforma/views/crfpa.py index 98a15559..40151788 100644 --- a/teleforma/views/crfpa.py +++ b/teleforma/views/crfpa.py @@ -441,12 +441,12 @@ class RegistrationPDFView(PDFTemplateResponseMixin, DetailView): return context -class RegistrationPDFViewDowload(RegistrationPDFView): +class RegistrationPDFViewDownload(RegistrationPDFView): pdf_filename = 'registration.pdf' def get_pdf_filename(self): - super(RegistrationPDFViewDowload, self).get_pdf_filename() + super(RegistrationPDFViewDownload, self).get_pdf_filename() student = self.context['student'] prefix = unicode(_('Registration')) filename = '_'.join([prefix, student.user.first_name, student.user.last_name])