mirror of
https://github.com/pretix/pretix.git
synced 2026-05-09 15:54:03 +00:00
Simplify merging rotated background PDFs (#4166)
* Simplify merging rotated background PDFs * fix code style issues
This commit is contained in:
committed by
GitHub
parent
ef60093bae
commit
71af40a08b
@@ -62,8 +62,7 @@ from django.utils.html import conditional_escape
|
|||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import gettext_lazy as _, pgettext
|
from django.utils.translation import gettext_lazy as _, pgettext
|
||||||
from i18nfield.strings import LazyI18nString
|
from i18nfield.strings import LazyI18nString
|
||||||
from pypdf import PdfReader, PdfWriter, Transformation
|
from pypdf import PdfReader, PdfWriter
|
||||||
from pypdf.generic import RectangleObject
|
|
||||||
from reportlab.graphics import renderPDF
|
from reportlab.graphics import renderPDF
|
||||||
from reportlab.graphics.barcode.qr import QrCodeWidget
|
from reportlab.graphics.barcode.qr import QrCodeWidget
|
||||||
from reportlab.graphics.shapes import Drawing
|
from reportlab.graphics.shapes import Drawing
|
||||||
@@ -1094,30 +1093,8 @@ class Renderer:
|
|||||||
|
|
||||||
for i, page in enumerate(new_pdf.pages):
|
for i, page in enumerate(new_pdf.pages):
|
||||||
bg_page = self.bg_pdf.pages[i]
|
bg_page = self.bg_pdf.pages[i]
|
||||||
bg_rotation = bg_page.get('/Rotate')
|
if bg_page.rotation != 0:
|
||||||
if bg_rotation:
|
bg_page.transfer_rotation_to_content()
|
||||||
# page.merge_page loses /Rotate on page2 so we need to manually add it as a transformation
|
|
||||||
# /Rotate is clockwise, transformation.rotate is counter-clockwise
|
|
||||||
t = Transformation()
|
|
||||||
w = bg_page.mediabox.width
|
|
||||||
h = bg_page.mediabox.height
|
|
||||||
if bg_rotation in (90, 270):
|
|
||||||
# offset due to rotation base
|
|
||||||
if bg_rotation == 90:
|
|
||||||
t = t.rotate(270).translate(0, w)
|
|
||||||
else:
|
|
||||||
t = t.rotate(90).translate(h, 0)
|
|
||||||
# rotate mediabox as well
|
|
||||||
bg_page.mediabox = RectangleObject((
|
|
||||||
bg_page.mediabox.left.as_numeric(),
|
|
||||||
bg_page.mediabox.bottom.as_numeric(),
|
|
||||||
bg_page.mediabox.top.as_numeric(),
|
|
||||||
bg_page.mediabox.right.as_numeric(),
|
|
||||||
))
|
|
||||||
bg_page.trimbox = bg_page.mediabox
|
|
||||||
elif bg_rotation == 180:
|
|
||||||
t = t.rotate(180).translate(w, h)
|
|
||||||
bg_page.add_transformation(t)
|
|
||||||
page.merge_page(bg_page, over=False)
|
page.merge_page(bg_page, over=False)
|
||||||
output.add_page(page)
|
output.add_page(page)
|
||||||
|
|
||||||
@@ -1153,30 +1130,8 @@ def merge_background(fg_pdf, bg_pdf, out_file, compress):
|
|||||||
output = PdfWriter()
|
output = PdfWriter()
|
||||||
for i, page in enumerate(fg_pdf.pages):
|
for i, page in enumerate(fg_pdf.pages):
|
||||||
bg_page = bg_pdf.pages[i]
|
bg_page = bg_pdf.pages[i]
|
||||||
bg_rotation = bg_page.get('/Rotate')
|
if bg_page.rotation != 0:
|
||||||
if bg_rotation:
|
bg_page.transfer_rotation_to_content()
|
||||||
# page.merge_page loses /Rotate on page2 so we need to manually add it as a transformation
|
|
||||||
# /Rotate is clockwise, transformation.rotate is counter-clockwise
|
|
||||||
t = Transformation()
|
|
||||||
w = bg_page.mediabox.width
|
|
||||||
h = bg_page.mediabox.height
|
|
||||||
if bg_rotation in (90, 270):
|
|
||||||
# offset due to rotation base
|
|
||||||
if bg_rotation == 90:
|
|
||||||
t = t.rotate(270).translate(0, w)
|
|
||||||
else:
|
|
||||||
t = t.rotate(90).translate(h, 0)
|
|
||||||
# rotate mediabox as well
|
|
||||||
bg_page.mediabox = RectangleObject((
|
|
||||||
bg_page.mediabox.left.as_numeric(),
|
|
||||||
bg_page.mediabox.bottom.as_numeric(),
|
|
||||||
bg_page.mediabox.top.as_numeric(),
|
|
||||||
bg_page.mediabox.right.as_numeric(),
|
|
||||||
))
|
|
||||||
bg_page.trimbox = bg_page.mediabox
|
|
||||||
elif bg_rotation == 180:
|
|
||||||
t = t.rotate(180).translate(w, h)
|
|
||||||
bg_page.add_transformation(t)
|
|
||||||
page.merge_page(bg_page, over=False)
|
page.merge_page(bg_page, over=False)
|
||||||
output.add_page(page)
|
output.add_page(page)
|
||||||
output.write(out_file)
|
output.write(out_file)
|
||||||
|
|||||||
Reference in New Issue
Block a user