From: Plom Heller Date: Sat, 4 Apr 2026 04:41:49 +0000 (+0200) Subject: Add option to keep mediabox intact. X-Git-Url: https://plomlompom.com/repos/booking/%22https:/validator.w3.org/templates?a=commitdiff_plain;h=31046ba56bd3ddacf6e11f01698d0b8946c34607;p=bookmaker Add option to keep mediabox intact. --- diff --git a/bookmaker.py b/bookmaker.py index bc26619..d524783 100755 --- a/bookmaker.py +++ b/bookmaker.py @@ -97,6 +97,7 @@ def parse_args(): parser.add_argument("-s", "--symmetry", action="store_true", help="alternate horizontal crops between odd and even pages") parser.add_argument("-n", "--nup4", action='store_true', help="puts 4 input pages onto 1 output page, adds binding cut stencil") parser.add_argument("-a", "--analyze", action="store_true", help="in --nup4, print lines identifying spine, page borders") + parser.add_argument("-k", "--keep_mediabox", action="store_true", help="keep non-A4 page shapes") parser.add_argument("-m", "--print_margin", type=float, default=0.43, help="print margin for --nup4 in cm (default 0.43)") return parser.parse_args() @@ -267,7 +268,7 @@ def normalize_pages_to_A4(pages_to_add): page.cropbox = page.mediabox -def collect_per_page_crops_and_zooms(args_crops, args_symmetry, pages_to_add): +def collect_per_page_crops_and_zooms(args_crops, args_keep_mediabox, args_symmetry, pages_to_add): crop_at_page = [PageCrop()] * len(pages_to_add) if args_crops: for c_string in args_crops: @@ -282,6 +283,14 @@ def collect_per_page_crops_and_zooms(args_crops, args_symmetry, pages_to_add): crop_at_page[page_num] = page_crop.give_mirror() else: crop_at_page[page_num] = page_crop + elif args_keep_mediabox: + for page_num, page in enumerate(pages_to_add): + crop_at_page[page_num] = PageCrop(page.mediabox.left / POINTS_PER_CM, + page.mediabox.bottom / POINTS_PER_CM, + (0.01 + A4_WIDTH - page.mediabox.right) / POINTS_PER_CM, + (0.01 + A4_HEIGHT - page.mediabox.top) / POINTS_PER_CM) + if args_symmetry and not page_num % 2: + crop_at_page[page_num] = crop_at_page[page_num].give_mirror() return crop_at_page @@ -441,8 +450,9 @@ def main(): rotate_pages(args.rotate_page, pages_to_add) if args.nup4: pad_pages_to_multiple_of_8(pages_to_add) - normalize_pages_to_A4(pages_to_add) - crop_at_page = collect_per_page_crops_and_zooms(args.crops, args.symmetry, pages_to_add) + if not args.keep_mediabox: + normalize_pages_to_A4(pages_to_add) + crop_at_page = collect_per_page_crops_and_zooms(args.crops, args.keep_mediabox, args.symmetry, pages_to_add) writer = pypdf.PdfWriter() if args.nup4: build_nup4_output(writer, pages_to_add, crop_at_page, args.print_margin, args.analyze, Canvas)