debian-pdfrw/examples/booklet.py

40 lines
820 B
Python
Executable File

#!/usr/bin/env python
'''
usage: booklet.py 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).
'''
import sys
import os
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()
inpfn, = sys.argv[1:]
outfn = 'booklet.' + os.path.basename(inpfn)
ipages = PdfReader(inpfn).pages
# Make sure we have an even number
if len(ipages) & 1:
ipages.append(None)
opages = []
while len(ipages) > 2:
opages.append(fixpage(ipages.pop(), ipages.pop(0)))
opages.append(fixpage(ipages.pop(0), ipages.pop()))
opages += ipages
PdfWriter().addpages(opages).write(outfn)