-def pad_pages_to_multiple_of_8(
- pages: list[Page]
- ) -> None:
- 'To pages add blank pages until its size is multiple of 8.'
- old_len = len(pages)
- mod_to_8 = old_len % 8
- if mod_to_8 > 0:
- for _ in range(8 - mod_to_8):
- pages += [Page.new_blank()]
- print(f'-n: number of input pages {old_len} not required multiple '
- f'of 8, padded to {len(pages)}')
-
-
-def normalize_pages_to_a4(
- pages: list[Page],
- arg_analyze: bool
- ) -> None:
- 'Zoom and adjust to A4 in pages, enact /Rotate.'
- max_x = max(page.box['right'] for page in pages)
- max_y = max(page.box['top'] for page in pages)
- zooms = (A4_WIDTH / max_x, A4_HEIGHT / max_y)
- offsets = {'tx': 0.0, 'ty': 0.0}
- zoom_by_x = zooms[0] < zooms[1]
- if zoom_by_x:
- zoom = zooms[0]
- offsets['ty'] = (A4_HEIGHT - max_y * zoom) / 2
- else:
- zoom = zooms[1]
- offsets['tx'] = (A4_WIDTH - max_x * zoom) / 2
- zoom_offset = 0.01 + offsets['tx'] / POINTS_PER_CM
- zoom_crop = PageCrop(
- left_cm=0 if zoom_by_x else zoom_offset,
- right_cm=0 if zoom_by_x else zoom_offset,
- bottom_cm=zoom_offset if zoom_by_x else 0,
- top_cm=zoom_offset if zoom_by_x else 0)
- for page in pages:
- page.scale(zoom)
- page.translate(**offsets)
- if (rotation := page.rotation()):
- page.rotate(360 - rotation)
- page.set_box(0, 0, A4_WIDTH, A4_HEIGHT)
- page.crop.add(zoom_crop)
- if arg_analyze:
- page.draw_borders((0.0, 0.75, 0.0))
-
-
-def collect_page_croppings(
- pages: list[Page],
- args_crops: str,
- args_keep_mediabox: bool,
- args_symmetry: str
- ) -> None:
- 'Calculate individual PageCrops from inputs.'
- if args_crops:
- for c_string in args_crops:
- page_range, crops = split_crops_string(c_string)
- idx_start, idx_after = parse_page_range(page_range, len(pages))
- prefix = '-c, -t' if args_symmetry else '-c'
- suffix = (' (but alternating left and right crop '
- 'between even and odd pages)') if args_symmetry else ''
- page_crop = PageCrop(*(float(crop) for crop in crops.split(',')))
- print(f'{prefix}: to pages {idx_start + 1}:{idx_after} '
- f'applying crop: {page_crop.format_in_cm}{suffix}')
- for idx in range(idx_start, idx_after):
- pages[idx].crop.add(page_crop, args_symmetry and idx % 2)
- elif args_keep_mediabox:
- for page in pages:
- page.crop.add(
+ def collect_page_croppings(
+ self,
+ args_crops: str,
+ args_keep_mediabox: bool,
+ args_symmetry: str
+ ) -> None:
+ 'Calculate individual PageCrops from inputs.'
+ if args_crops:
+ for c_string in args_crops:
+ page_range, crops = split_crops_string(c_string)
+ idx_start, idx_after = parse_page_range(page_range, len(self))
+ prefix = '-c, -t' if args_symmetry else '-c'
+ suffix = ((' (but alternating left and right crop '
+ 'between even and odd pages)') if args_symmetry
+ else '')
+ page_crop = PageCrop(*(float(crop)
+ for crop in crops.split(',')))
+ print(f'{prefix}: to pages {idx_start + 1}:{idx_after} '
+ f'applying crop: {page_crop.format_in_cm}{suffix}')
+ for idx in range(idx_start, idx_after):
+ self.pages[idx].crop.add(page_crop,
+ args_symmetry and idx % 2)
+ elif args_keep_mediabox:
+ for page in self.pages:
+ page.crop.add(