pdf2book.py works

This commit is contained in:
uni@bor.mac 2024-10-02 00:20:15 +02:00
parent 54fdc697dc
commit f9c5191b7d
2 changed files with 52 additions and 23 deletions

View File

@ -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

View File

@ -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)