Also process art and bleed boxes

This commit is contained in:
James R. Barlow
2025-12-21 14:03:28 -08:00
parent 41758766a1
commit 57e2600566
2 changed files with 43 additions and 12 deletions
+31 -10
View File
@@ -40,6 +40,7 @@ from ocrmypdf.hocrtransform import DebugRenderOptions, HocrTransform
from ocrmypdf.hocrtransform._font import Courier
from ocrmypdf.pdfa import generate_pdfa_ps
from ocrmypdf.pdfinfo import Colorspace, Encoding, PageInfo, PdfInfo
from ocrmypdf.pdfinfo.info import FloatRect
from ocrmypdf.pluginspec import OrientationConfidence
try:
@@ -837,6 +838,23 @@ def _offset_rect(rect: tuple[float, float, float, float], offset: tuple[float, f
)
def _adjust_pagebox(
page: pikepdf.Page,
media_box: FloatRect,
name: pikepdf.Name,
target_box: FloatRect,
offset: tuple[float, float],
swap_axis: bool,
):
if media_box == target_box:
return
box = _offset_rect(target_box, offset)
if swap_axis:
box = box[1], box[0], box[3], box[2]
page[name] = box
log.debug(f"{str(name)} = {target_box}")
def fix_pagepdf_boxes(
infile: Path | BinaryIO,
out_file: Path,
@@ -861,22 +879,25 @@ def fix_pagepdf_boxes(
"""
with pikepdf.open(infile) as pdf:
for page in pdf.pages:
# page.BleedBox = page_context.pageinfo.bleedbox
# page.ArtBox = page_context.pageinfo.artbox
log.debug(
f"initial mediabox={page.MediaBox} and pageinfo mediabox={page_context.pageinfo.mediabox}"
f"initial mediabox={page.MediaBox} and pageinfo "
f"mediabox={page_context.pageinfo.mediabox}"
)
mediabox = page_context.pageinfo.mediabox
offset = -mediabox[0], -mediabox[1]
cropbox = _offset_rect(page_context.pageinfo.cropbox, offset)
trimbox = _offset_rect(page_context.pageinfo.trimbox, offset)
if swap_axis:
cropbox = cropbox[1], cropbox[0], cropbox[3], cropbox[2]
trimbox = trimbox[1], trimbox[0], trimbox[3], trimbox[2]
mediabox = mediabox[1], mediabox[0], mediabox[3], mediabox[2]
page.CropBox = cropbox
page.TrimBox = trimbox
log.debug(f"cropbox={cropbox}, trimbox={trimbox}, mediabox={mediabox}")
boxes = ['CropBox', 'TrimBox', 'ArtBox', 'BleedBox']
for box_name in boxes:
_adjust_pagebox(
page,
mediabox,
pikepdf.Name(f"/{box_name}"),
getattr(page_context.pageinfo, box_name.lower()),
offset,
swap_axis,
)
pdf.save(out_file)
return out_file
+12 -2
View File
@@ -900,8 +900,8 @@ class PageInfo:
width_pt = mediabox[2] - mediabox[0]
height_pt = mediabox[3] - mediabox[1]
# self._artbox = [float(d) for d in page.artbox.as_list()]
# self._bleedbox = [float(d) for d in page.bleedbox.as_list()]
self._artbox = [float(d) for d in page.artbox.as_list()]
self._bleedbox = [float(d) for d in page.bleedbox.as_list()]
self._cropbox = [float(d) for d in page.cropbox.as_list()]
self._mediabox = [float(d) for d in page.mediabox.as_list()]
self._trimbox = [float(d) for d in page.trimbox.as_list()]
@@ -1038,6 +1038,16 @@ class PageInfo:
"""Return trimbox of page in PDF coordinates."""
return self._trimbox
@property
def artbox(self) -> FloatRect:
"""Return artbox of page in PDF coordinates."""
return self._artbox
@property
def bleedbox(self) -> FloatRect:
"""Return bleedbox of page in PDF coordinates."""
return self._bleedbox
@property
def images(self) -> list[ImageInfo]:
"""Return images."""