From 4b9932420bb34b96d722bd925cbdada9e72a58e8 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Fri, 16 Sep 2022 11:06:24 +0200 Subject: [PATCH] PDF: Fix missing backgrounds when outputting multiple tickets/badges per page (Z#23107984) --- src/pretix/plugins/badges/exporters.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/pretix/plugins/badges/exporters.py b/src/pretix/plugins/badges/exporters.py index fc1945886..ba49b565d 100644 --- a/src/pretix/plugins/badges/exporters.py +++ b/src/pretix/plugins/badges/exporters.py @@ -49,6 +49,7 @@ from django.db.models.functions import Coalesce from django.utils.timezone import make_aware from django.utils.translation import gettext as _, gettext_lazy from PyPDF2 import Transformation +from PyPDF2.generic import RectangleObject from reportlab.lib import pagesizes from reportlab.lib.units import mm from reportlab.pdfgen import canvas @@ -205,10 +206,17 @@ def render_pdf(event, positions, opt): ) for i, (op, r) in enumerate(positions): bg_page = copy.copy(r.bg_pdf.pages[0]) - bg_page.trimbox = bg_page.mediabox offsetx = opt['margins'][3] + (i % opt['cols']) * opt['offsets'][0] offsety = opt['margins'][2] + (opt['rows'] - 1 - i // opt['cols']) * opt['offsets'][1] bg_page.add_transformation(Transformation().translate(offsetx, offsety)) + mb = bg_page.mediabox + bg_page.mediabox = RectangleObject(( + mb.left.as_numeric() + offsetx, + mb.bottom.as_numeric() + offsety, + mb.right.as_numeric() + offsetx, + mb.top.as_numeric() + offsety + )) + bg_page.trimbox = bg_page.mediabox empty_pdf_page.merge_page(bg_page) empty_pdf_page.merge_page(canvas_pdf_reader.pages[0])