Compare commits
No commits in common. "03daf77afb7d0d9a8cee6f4b7db45cf0e7a93b00" and "6b66b83f5d1d02ec5d96a155d6ea7685321b316e" have entirely different histories.
03daf77afb
...
6b66b83f5d
@ -10,7 +10,7 @@ AUTHOR="Yɛn Ara"
|
|||||||
PUBLISHER="AQO\\\\ABA"
|
PUBLISHER="AQO\\\\ABA"
|
||||||
PUBLISHER="twi\TeX"
|
PUBLISHER="twi\TeX"
|
||||||
EDITION="First Edition"
|
EDITION="First Edition"
|
||||||
COMPILATION_RUNS="3"
|
COMPILATION_RUNS="1"
|
||||||
INFILES="""
|
INFILES="""
|
||||||
Anansesem - Ghanaian Folk Tales
|
Anansesem - Ghanaian Folk Tales
|
||||||
testfiles/parallel-ak.md
|
testfiles/parallel-ak.md
|
||||||
|
116
pdf2book.py
116
pdf2book.py
@ -1,9 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from pypdf import PaperSize, PdfReader, PdfWriter, Transformation
|
from pypdf import PdfReader
|
||||||
from pypdf.generic import RectangleObject
|
from pypdf import PdfWriter
|
||||||
|
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
prog='pdf2book',
|
prog='pdf2book',
|
||||||
@ -14,7 +12,6 @@ parser.add_argument('pdf_file') # positional argument
|
|||||||
#parser.add_argument('pages', type=int) # positional argument
|
#parser.add_argument('pages', type=int) # positional argument
|
||||||
#parser.add_argument('-s', '--signature') # option that takes a value
|
#parser.add_argument('-s', '--signature') # option that takes a value
|
||||||
parser.add_argument('-v', '--verbose', action='store_true') # on/off flag
|
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',
|
parser.add_argument('-s', '--signature',
|
||||||
dest='signature',
|
dest='signature',
|
||||||
type=int,
|
type=int,
|
||||||
@ -86,7 +83,6 @@ def get_reorder(number_of_pages: int, signature_size: int):
|
|||||||
#print(lst)
|
#print(lst)
|
||||||
#print(len(lst))
|
#print(len(lst))
|
||||||
return lst
|
return lst
|
||||||
|
|
||||||
def print_signatures(lst: list,signature_size: int):
|
def print_signatures(lst: list,signature_size: int):
|
||||||
if signature_size==0: signature_size=1
|
if signature_size==0: signature_size=1
|
||||||
for i in range( len( lst ) ):
|
for i in range( len( lst ) ):
|
||||||
@ -96,9 +92,13 @@ def print_signatures(lst: list,signature_size: int):
|
|||||||
print(lst[i], end=' ')
|
print(lst[i], end=' ')
|
||||||
else:
|
else:
|
||||||
print(lst[i],end='.')
|
print(lst[i],end='.')
|
||||||
|
lst=get_reorder(number_of_pages, signature_size)
|
||||||
|
print_signatures(lst,signature_size)
|
||||||
|
|
||||||
# REARRANGING OF PAGES
|
# REARRANGING OF PAGES
|
||||||
|
|
||||||
def rearrange_pages(reader, lst):
|
def rearrange_pages(reader, lst):
|
||||||
|
|
||||||
writer = PdfWriter()
|
writer = PdfWriter()
|
||||||
for page in lst:
|
for page in lst:
|
||||||
# print(page)
|
# print(page)
|
||||||
@ -106,109 +106,11 @@ def rearrange_pages(reader, lst):
|
|||||||
writer.add_blank_page(width=reader.pages[0].mediabox.width,height=reader.pages[0].mediabox.height)
|
writer.add_blank_page(width=reader.pages[0].mediabox.width,height=reader.pages[0].mediabox.height)
|
||||||
else:
|
else:
|
||||||
writer.add_page(reader.pages[page-1])
|
writer.add_page(reader.pages[page-1])
|
||||||
|
|
||||||
return writer
|
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
|
# 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:
|
with open(outfile, "wb") as fp:
|
||||||
writer.write(fp)
|
writer.write(fp)
|
||||||
|
@ -3,12 +3,8 @@
|
|||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
|
|
||||||
### USAGE
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# from command line, yaml file or env vars
|
# from command line, yaml file or env vars
|
||||||
def parse_options(filename="anansesem.yaml"):
|
def parse_options(filename="conf.yaml"):
|
||||||
import yaml
|
import yaml
|
||||||
with open(filename) as stream:
|
with open(filename) as stream:
|
||||||
try:
|
try:
|
||||||
@ -190,7 +186,7 @@ def convert_text_format(conf):
|
|||||||
)
|
)
|
||||||
print(infile)
|
print(infile)
|
||||||
## MAIN
|
## MAIN
|
||||||
conf=parse_options("anansesem.yaml")
|
conf=parse_options()
|
||||||
project_dir=create_project_dir(conf)
|
project_dir=create_project_dir(conf)
|
||||||
create_skel(project_dir, conf)
|
create_skel(project_dir, conf)
|
||||||
infiles=conf['project-options']['infiles']
|
infiles=conf['project-options']['infiles']
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user