PDF: Fix missing backgrounds when outputting multiple tickets/badges per page (Z#23107984)

This commit is contained in:
Richard Schreiber
2022-09-16 11:06:24 +02:00
committed by GitHub
parent 87cfd8f538
commit 4b9932420b

View File

@@ -49,6 +49,7 @@ from django.db.models.functions import Coalesce
from django.utils.timezone import make_aware from django.utils.timezone import make_aware
from django.utils.translation import gettext as _, gettext_lazy from django.utils.translation import gettext as _, gettext_lazy
from PyPDF2 import Transformation from PyPDF2 import Transformation
from PyPDF2.generic import RectangleObject
from reportlab.lib import pagesizes from reportlab.lib import pagesizes
from reportlab.lib.units import mm from reportlab.lib.units import mm
from reportlab.pdfgen import canvas from reportlab.pdfgen import canvas
@@ -205,10 +206,17 @@ def render_pdf(event, positions, opt):
) )
for i, (op, r) in enumerate(positions): for i, (op, r) in enumerate(positions):
bg_page = copy.copy(r.bg_pdf.pages[0]) 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] offsetx = opt['margins'][3] + (i % opt['cols']) * opt['offsets'][0]
offsety = opt['margins'][2] + (opt['rows'] - 1 - i // opt['cols']) * opt['offsets'][1] offsety = opt['margins'][2] + (opt['rows'] - 1 - i // opt['cols']) * opt['offsets'][1]
bg_page.add_transformation(Transformation().translate(offsetx, offsety)) 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(bg_page)
empty_pdf_page.merge_page(canvas_pdf_reader.pages[0]) empty_pdf_page.merge_page(canvas_pdf_reader.pages[0])