Try to adjust code

This commit is contained in:
Raphael Michel
2026-05-17 23:02:53 +02:00
parent e2efb73f66
commit 8f8c3b9efd
2 changed files with 10 additions and 30 deletions

View File

@@ -1222,9 +1222,7 @@ class Renderer:
for i, page in enumerate(fg_pdf.pages): for i, page in enumerate(fg_pdf.pages):
bg_page = self.bg_pdf.pages[i] bg_page = self.bg_pdf.pages[i]
_correct_page_media_box(bg_page) _merge_with_correct_page_media_box(output, page, bg_page)
page.merge_page(bg_page, over=False)
output.add_page(page)
# pdf_header is a string like "%pdf-X.X" # pdf_header is a string like "%pdf-X.X"
if float(self.bg_pdf.pdf_header[5:]) > float(fg_pdf.pdf_header[5:]): if float(self.bg_pdf.pdf_header[5:]) > float(fg_pdf.pdf_header[5:]):
@@ -1291,8 +1289,7 @@ def merge_background(fg_pdf: PdfWriter, bg_pdf: PdfWriter, out_file, compress):
else: else:
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]
_correct_page_media_box(bg_page) _merge_with_correct_page_media_box(fg_pdf, page, bg_page)
page.merge_page(bg_page, over=False)
# pdf_header is a string like "%pdf-X.X" # pdf_header is a string like "%pdf-X.X"
if float(bg_pdf.pdf_header[5:]) > float(fg_pdf.pdf_header[5:]): if float(bg_pdf.pdf_header[5:]) > float(fg_pdf.pdf_header[5:]):
@@ -1301,27 +1298,18 @@ def merge_background(fg_pdf: PdfWriter, bg_pdf: PdfWriter, out_file, compress):
fg_pdf.write(out_file) fg_pdf.write(out_file)
def _correct_page_media_box(page: pypdf.PageObject): def _merge_with_correct_page_media_box(output: pypdf.PdfWriter, fg_page: pypdf.PageObject, bg_page: pypdf.PageObject):
if page.rotation != 0: if bg_page.rotation != 0:
page.transfer_rotation_to_content() bg_page.transfer_rotation_to_content()
media_box = page.mediabox media_box = bg_page.mediabox
trsf = pypdf.Transformation() trsf = pypdf.Transformation()
if media_box.bottom != 0: if media_box.bottom != 0:
trsf = trsf.translate(0, -media_box.bottom) trsf = trsf.translate(0, -media_box.bottom)
if media_box.left != 0: if media_box.left != 0:
trsf = trsf.translate(-media_box.left, 0) trsf = trsf.translate(-media_box.left, 0)
page.add_transformation(trsf, False)
for b in ["/MediaBox", "/CropBox", "/BleedBox", "/TrimBox", "/ArtBox"]: fg_page = output.add_page(fg_page)
if b in page: fg_page.merge_transformed_page(bg_page, trsf, over=False, expand=False)
rr = pypdf.generic.RectangleObject(page[b])
pt1 = trsf.apply_on(rr.lower_left)
pt2 = trsf.apply_on(rr.upper_right)
page[pypdf.generic.NameObject(b)] = pypdf.generic.RectangleObject((
min(pt1[0], pt2[0]),
min(pt1[1], pt2[1]),
max(pt1[0], pt2[0]),
max(pt1[1], pt2[1]),
))
@deconstructible @deconstructible

View File

@@ -55,7 +55,6 @@ from django.db.models.functions import Cast, Coalesce
from django.utils.timezone import make_aware from django.utils.timezone import make_aware
from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy from django.utils.translation import gettext as _, gettext_lazy, pgettext_lazy
from pypdf import PageObject, PdfReader, PdfWriter, Transformation from pypdf import PageObject, PdfReader, PdfWriter, Transformation
from pypdf.generic import RectangleObject
from reportlab.lib import pagesizes from reportlab.lib import pagesizes
from reportlab.lib.units import inch, mm from reportlab.lib.units import inch, mm
from reportlab.pdfgen import canvas from reportlab.pdfgen import canvas
@@ -238,15 +237,8 @@ def _render_nup_page(nup_pdf: PdfWriter, input_pages: PageObject, opt: dict) ->
di = i % badges_per_page di = i % badges_per_page
tx = opt['margins'][3] + (di % opt['cols']) * opt['offsets'][0] tx = opt['margins'][3] + (di % opt['cols']) * opt['offsets'][0]
ty = opt['margins'][2] + (opt['rows'] - 1 - (di // opt['cols'])) * opt['offsets'][1] ty = opt['margins'][2] + (opt['rows'] - 1 - (di // opt['cols'])) * opt['offsets'][1]
page.add_transformation(Transformation().translate(tx, ty))
page.mediabox = RectangleObject((
Decimal('%.5f' % (page.mediabox.left.as_numeric() + tx)),
Decimal('%.5f' % (page.mediabox.bottom.as_numeric() + ty)),
Decimal('%.5f' % (page.mediabox.right.as_numeric() + tx)),
Decimal('%.5f' % (page.mediabox.top.as_numeric() + ty))
))
page.trimbox = page.cropbox = page.mediabox page.trimbox = page.cropbox = page.mediabox
nup_page.merge_page(page) nup_page.merge_transformed_page(page, Transformation().translate(tx, ty))
return nup_page return nup_page