def normalize_pages_to_a4(
pages_to_add: list[PdfPage]
) -> None:
- 'Adjust pages_to_add .mediabox=.cropbox to A4, enact /Rotate inside that.'
+ 'Zoom and adjust in pages_to_add .mediabox=.cropbox to A4, enact /Rotate.'
+ max_x = max(page.mediabox.right for page in pages_to_add)
+ max_y = max(page.mediabox.top for page in pages_to_add)
+ zooms = (A4_WIDTH / max_x, A4_HEIGHT / max_y)
+ offsets = {'tx': 0.0, 'ty': 0.0}
+ if zooms[0] < zooms[1]:
+ zoom = zooms[0]
+ offsets['ty'] = (A4_HEIGHT - max_y * zoom) / 2
+ else:
+ zoom = zooms[1]
+ offsets['tx'] = (A4_WIDTH - max_x * zoom) / 2
for page in pages_to_add:
+ page.add_transformation(PdfTransformation().scale(zoom, zoom))
+ page.add_transformation(PdfTransformation().translate(**offsets))
if '/Rotate' in page: # TODO: preserve rotation, but in canvas?
rotation: int = page['/Rotate'] # type: ignore
page.rotate(360 - rotation)
args.page_range)
validate_ranges(args, pages_to_add)
rotate_pages(args.rotate_page, pages_to_add)
- if args.nup4:
- pad_pages_to_multiple_of_8(pages_to_add)
if not args.keep_mediabox:
normalize_pages_to_a4(pages_to_add)
+ if args.nup4:
+ pad_pages_to_multiple_of_8(pages_to_add)
page_croppings = collect_page_croppings(args.crops,
args.keep_mediabox,
args.symmetry,