Compare commits

...

5 Commits

4 changed files with 114 additions and 12 deletions

View File

@ -10,7 +10,7 @@ AUTHOR="Yɛn Ara"
PUBLISHER="AQO\\\\ABA"
PUBLISHER="twi\TeX"
EDITION="First Edition"
COMPILATION_RUNS="1"
COMPILATION_RUNS="3"
INFILES="""
Anansesem - Ghanaian Folk Tales
testfiles/parallel-ak.md

View File

@ -1,7 +1,9 @@
#!/usr/bin/env python3
from pypdf import PdfReader
from pypdf import PdfWriter
from pypdf import PaperSize, PdfReader, PdfWriter, Transformation
from pypdf.generic import RectangleObject
import argparse
parser = argparse.ArgumentParser(
prog='pdf2book',
@ -12,6 +14,7 @@ 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('-z', '--zine', action='store_true', help='Input pdf needs to be 16 pages')
parser.add_argument('-s', '--signature',
dest='signature',
type=int,
@ -83,6 +86,7 @@ def get_reorder(number_of_pages: int, signature_size: int):
#print(lst)
#print(len(lst))
return lst
def print_signatures(lst: list,signature_size: int):
if signature_size==0: signature_size=1
for i in range( len( lst ) ):
@ -92,13 +96,9 @@ def print_signatures(lst: list,signature_size: int):
print(lst[i], end=' ')
else:
print(lst[i],end='.')
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)
@ -106,11 +106,109 @@ def rearrange_pages(reader, lst):
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
def make_zine(reader, lst):
# _____________________
# | 1r | 8r | 7r | 6r |
# ---------------------
# | 2 | 3 | 4 | 5 |
# ---------------------
#
# _________________________
# | 9r | 16r | 15r | 14r |
# -------------------------
# | 10 | 11 | 12 | 13 |
# -------------------------
#
# todo
# - [ ] alternative folding 1 for zine
# _____________________
# | 3r | 2r | 1r | 8r |
# ---------------------
# | 4 | 5 | 6 | 7 |
# ---------------------
# _________________________
# | 11r | 10r | 9r | 16r |
# -------------------------
# | 12 | 13 | 14 | 15 |
# -------------------------
#
page_order=[
2, 3, 4, 5,
1, 8, 7, 6,
10,11,12,13,
9,16,15,14
]
print("zine")
# Create a destination file, and add a blank page to it
writer = PdfWriter()
# Copy source page to destination page, several times
for i in range(2):
destpage = writer.add_blank_page(
width=PaperSize.A4.height,
height=PaperSize.A4.width
)
for y in range(2):
for x in range(4):
pageposition=8*i+4*y+x
sourcepage=reader.pages[page_order[pageposition]-1]
mb=sourcepage.mediabox
sourcepage.cropbox = RectangleObject((
-2*mb.right,
-4*mb.top,
2*mb.right,
2*mb.top
))
if y == 1:
transformation = Transformation().rotate(180)
r="r"
sourcepage.add_transformation(transformation)
tx_val=(1*x+1) * sourcepage.mediabox.width
ty_val=2*y * sourcepage.mediabox.height
else:
tx_val=x * sourcepage.mediabox.width
ty_val=2*y * sourcepage.mediabox.height
r=" "
if x==3:
print(page_order[pageposition],r)
else:
print(page_order[pageposition],r,end=' ')
destpage.merge_transformed_page(
sourcepage,
Transformation(
).translate(
tx=tx_val,
ty=ty_val,
).scale(
sx=0.5,
sy=0.5
)
, expand=True
)
# destpage.
destpage.mediabox = RectangleObject((
0,
0,
2*mb.right,
1*mb.top
))
#writer.add_page(destpage)
# destpage = writer.add_blank_page(
# width=PaperSize.A4.height,
# height=PaperSize.A4.width
# )
return writer
lst=get_reorder(number_of_pages, signature_size)
if args.zine :
writer=make_zine(reader, lst)
# signature_size=zine
outfile=args.pdf_file.split(".pdf")[0]+"_zine.pdf"
else:
print_signatures(lst,signature_size)
writer=rearrange_pages(reader,lst)
outfile=args.pdf_file.split(".pdf")[0]+"_book_s"+str(signature_size)+".pdf"
# 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)

View File

@ -3,8 +3,12 @@
import os
import shutil
### USAGE
# from command line, yaml file or env vars
def parse_options(filename="conf.yaml"):
def parse_options(filename="anansesem.yaml"):
import yaml
with open(filename) as stream:
try:
@ -186,7 +190,7 @@ def convert_text_format(conf):
)
print(infile)
## MAIN
conf=parse_options()
conf=parse_options("anansesem.yaml")
project_dir=create_project_dir(conf)
create_skel(project_dir, conf)
infiles=conf['project-options']['infiles']

BIN
testfiles/zine.pdf Normal file

Binary file not shown.