debian-pdfrw/examples/booklet.py

57 lines
1.3 KiB
Python
Executable File

#!/usr/bin/env python
'''
usage: booklet.py [-p] my.pdf
Creates booklet.my.pdf
Pages organized in a form suitable for booklet printing, e.g.
to print 4 8.5x11 pages using a single 11x17 sheet (double-sided).
The output would be using the same type of sheet
and you can get up to 3 blank sides if -p is enabled.
Otherwise the two sides in the middle will be in original page size
and you can have 1 blank sides at most.
'''
import os
import argparse
from pdfrw import PdfReader, PdfWriter, PageMerge
def fixpage(*pages):
result = PageMerge() + (x for x in pages if x is not None)
result[-1].x += result[0].w
return result.render()
parser = argparse.ArgumentParser()
parser.add_argument("input", help="Input pdf file name")
parser.add_argument("-p", "--padding", action = "store_true",
help="Padding the document so that all pages use the same type of sheet")
args = parser.parse_args()
inpfn = args.input
outfn = 'booklet.' + os.path.basename(inpfn)
ipages = PdfReader(inpfn).pages
if args.padding:
pad_to = 4
else:
pad_to = 2
# Make sure we have a correct number of sides
ipages += [None]*(-len(ipages)%pad_to)
opages = []
while len(ipages) > 2:
opages.append(fixpage(ipages.pop(), ipages.pop(0)))
opages.append(fixpage(ipages.pop(0), ipages.pop()))
opages += ipages
PdfWriter(outfn).addpages(opages).write()