#!/usr/bin/env python3 import argparse import os.path import subprocess SIGNATURE = ( 15, 0, 13, 2, 1, 14, 3, 12, 11, 4, 9, 6, 5, 10, 7, 8, ) SIGNATURE_32 = ( 15, 0, 31, 16, 1, 14, 17, 30, 13, 2, 29, 18, 3, 12, 19, 28, 11, 4, 27, 20, 5, 10, 21, 26, 9, 6, 25, 22, 7, 8, 23, 24, ) def get_parser(): parser = argparse.ArgumentParser() parser.add_argument( "--file", '-f', help="Name of the PDF file", ) parser.add_argument( "--double", "-d", action="store_true", help="Put two signatures on 4 A4 sheet. Pages should be a " "multiple of 32", ) parser.add_argument( "pagespec", help="Page selection. At the moment only '-' is supported" ) return parser def main(): parser = get_parser() args = parser.parse_args() pspec = args.pagespec.split('-') try: start = int(pspec[0]) end = int(pspec[1]) except ValueError: parser.print_usage() except IndexError: parser.print_usage() if args.double: signature = SIGNATURE_32 else: signature = SIGNATURE sig_len = len(signature) pages = [str(i) for i in range(start, end+1)] if len(pages) % sig_len != 0: empty = sig_len - len(pages) % sig_len pages = pages + ["{}"] * empty rearranged = [] while pages: for i in signature: rearranged.append(pages[i]) pages = pages[sig_len:] base, ext = os.path.splitext(args.file) out_fname = base + '-book' + ext subprocess.run([ 'pdfjam', '--nup', '2x2', #'--no-tidy', '-o', out_fname, args.file, ','.join(rearranged) ]) if __name__ == "__main__": main()