From 229ad9108b26306ce5642046fd822d8ba1d42425 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Tue, 12 Jun 2018 15:50:03 +0200 Subject: [PATCH] Fix ticket exporter --- .../plugins/ticketoutputpdf/exporters.py | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/pretix/plugins/ticketoutputpdf/exporters.py b/src/pretix/plugins/ticketoutputpdf/exporters.py index 9f9115c6a3..cbe6c1e513 100644 --- a/src/pretix/plugins/ticketoutputpdf/exporters.py +++ b/src/pretix/plugins/ticketoutputpdf/exporters.py @@ -1,8 +1,11 @@ from io import BytesIO +from django.core.files.base import ContentFile from django.utils.translation import ugettext as _ +from PyPDF2.merger import PdfFileMerger from pretix.base.exporter import BaseExporter +from pretix.base.i18n import language from pretix.base.models import Order, OrderPosition from .ticketoutput import PdfTicketOutput @@ -14,20 +17,30 @@ class AllTicketsPDF(BaseExporter): identifier = "pdfoutput_all_tickets" def render(self, form_data): + merger = PdfFileMerger() + o = PdfTicketOutput(self.event) qs = OrderPosition.objects.filter(order__event=self.event, order__status=Order.STATUS_PAID).select_related( 'order', 'item', 'variation' ) - buffer = BytesIO() - p = o._create_canvas(buffer) + for op in qs: if op.addon_to_id and not self.event.settings.ticket_download_addons: continue if not op.item.admission and not self.event.settings.ticket_download_nonadm: continue - layout = o.layout_map.get(op.item_id, o.default_layout) - o._draw_page(layout, p, op, op.order) - p.save() - outbuffer = o._render_with_background(buffer) + with language(op.order.locale): + buffer = BytesIO() + p = o._create_canvas(buffer) + layout = o.layout_map.get(op.item_id, o.default_layout) + o._draw_page(layout, p, op, op.order) + p.save() + outbuffer = o._render_with_background(layout, buffer) + merger.append(ContentFile(outbuffer.read())) + + outbuffer = BytesIO() + merger.write(outbuffer) + merger.close() + outbuffer.seek(0) return '{}_tickets.pdf'.format(self.event.slug), 'application/pdf', outbuffer.read()