diff --git a/README.md b/README.md index ee49926..a7e0a50 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,7 @@ Some options need to be set in `config.sh` file. ## pdf2book.py This script takes a pdf and reorders pages for printing signatures. The number of pages per signature can be varied +Dependency: `pypdf` ``` s=1: 1,2,3,4 -> 04,01.02,03 i=0 08,05.06,07 i=1 diff --git a/pdf2book.py b/pdf2book.py index b265d8c..cc37394 100755 --- a/pdf2book.py +++ b/pdf2book.py @@ -1,35 +1,43 @@ #!/usr/bin/env python3 +from pypdf import PdfReader +from pypdf import PdfWriter import argparse parser = argparse.ArgumentParser( prog='pdf2book', description='pdf2book rearranges pages for signature printing ', epilog='AQOABA') -#parser.add_argument('pdf-file') # positional argument -parser.add_argument('pages', type=int) # positional argument +parser.add_argument('pdf_file') # positional argument +#parser.add_argument('pages', type=int) # positional argument #parser.add_argument('-s', '--signature') # option that takes a value parser.add_argument('-v', '--verbose', action='store_true') # on/off flag parser.add_argument('-s', '--signature', dest='signature', type=int, action='store', - default=1, + default=0, help='') args = parser.parse_args() -s=args.signature -if s < 0 : +signature_size=args.signature +if signature_size < 0 : # print("signature size must be greater than 0!") print("signature size must be positive integer!") exit(1) -pages=args.pages + +reader = PdfReader(args.pdf_file) +number_of_pages = len(reader.pages) +#page = reader.pages[0] +#text = page.extract_text() + +pages=number_of_pages #print(pages) lst=[] -def get_reorder(page_number: int, signature_size: int): - panu=page_number +def get_reorder(number_of_pages: int, signature_size: int): + panu=number_of_pages sisi=signature_size # s| 1 | 2 | 3 | 4 | @@ -49,23 +57,23 @@ def get_reorder(page_number: int, signature_size: int): #12 | 12 | 16 | 12 | 16 | #13 | 16 | 16 | 24 | 16 | - p=page_number + p=number_of_pages s=signature_size - if s == 0: - s=1 - pages_filled= ( int((p-1)/(4*s)) +1 )*4*s - s=int(pages_filled/4) - pages_filled= ( int((p-1)/(4*s)) +1 )*4*s + if signature_size == 0: + signature_size=1 + pages_filled= ( int((number_of_pages-1)/(4*signature_size)) +1 )*4*signature_size + signature_size=int(pages_filled/4) + pages_filled= ( int((number_of_pages-1)/(4*signature_size)) +1 )*4*signature_size - signature_count=int( pages_filled/s/4 ) + signature_count=int( pages_filled/signature_size/4 ) #print(signature_count) for i in range(signature_count): # print("i=",i) - down=(i+1)*4*s + down=(i+1)*4*signature_size # print("down=",down) - up= (i*4*s)+1 + up= (i*4*signature_size)+1 # print("up",up) - for count in range(s): + for count in range(signature_size): # print("count=",count) lst.append(down); down -= 1 lst.append(up); up += 1 @@ -75,14 +83,34 @@ def get_reorder(page_number: int, signature_size: int): #print(lst) #print(len(lst)) return lst -def print_signatures(lst: list,s: int): - if s==0: s=1 +def print_signatures(lst: list,signature_size: int): + if signature_size==0: signature_size=1 for i in range( len( lst ) ): - if ( (i+1) % (4*s) == 0 ): + if ( (i+1) % (4*signature_size) == 0 ): print(lst[i]) elif ( (i+1) % (4) == 0 ): print(lst[i], end=' ') else: print(lst[i],end='.') -lst=get_reorder(args.pages, args.signature) -print_signatures(lst,s) +lst=get_reorder(number_of_pages, signature_size) +print_signatures(lst,signature_size) + +# REARRANGING OF PAGES + +def rearrange_pages(reader, lst): + + writer = PdfWriter() + for page in lst: +# print(page) + if page > len(reader.pages): + writer.add_blank_page(width=reader.pages[0].mediabox.width,height=reader.pages[0].mediabox.height) + else: + writer.add_page(reader.pages[page-1]) + + return writer + +# SAVE FILE TO DISK +writer=rearrange_pages(reader,lst) +outfile=args.pdf_file.split(".pdf")[0]+"_book_s"+str(signature_size)+".pdf" +with open(outfile, "wb") as fp: + writer.write(fp)