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()
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:
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
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)