debian-pdfrw/examples/rl1/4up.py

57 lines
1.1 KiB
Python
Executable File

#!/usr/bin/env python
'''
usage: 4up.py my.pdf
Uses Form XObjects and reportlab to create 4up.my.pdf.
Demonstrates use of pdfrw with reportlab.
'''
import sys
import os
from reportlab.pdfgen.canvas import Canvas
from pdfrw import PdfReader
from pdfrw.buildxobj import pagexobj
from pdfrw.toreportlab import makerl
def addpage(canvas, allpages):
pages = allpages[:4]
del allpages[:4]
x_max = max(page.BBox[2] for page in pages)
y_max = max(page.BBox[3] for page in pages)
canvas.setPageSize((x_max, y_max))
for index, page in enumerate(pages):
x = x_max * (index & 1) / 2.0
y = y_max * (index <= 1) / 2.0
canvas.saveState()
canvas.translate(x, y)
canvas.scale(0.5, 0.5)
canvas.doForm(makerl(canvas, page))
canvas.restoreState()
canvas.showPage()
def go(argv):
inpfn, = argv
outfn = '4up.' + os.path.basename(inpfn)
pages = PdfReader(inpfn).pages
pages = [pagexobj(x) for x in pages]
canvas = Canvas(outfn)
while pages:
addpage(canvas, pages)
canvas.save()
if __name__ == '__main__':
go(sys.argv[1:])