1#!/usr/bin/env python 2 3''' 4usage: 4up.py my.pdf 5 6 7Uses Form XObjects and reportlab to create 4up.my.pdf. 8 9Demonstrates use of pdfrw with reportlab. 10 11''' 12 13import sys 14import os 15 16from reportlab.pdfgen.canvas import Canvas 17 18from pdfrw import PdfReader 19from pdfrw.buildxobj import pagexobj 20from pdfrw.toreportlab import makerl 21 22 23def addpage(canvas, allpages): 24 pages = allpages[:4] 25 del allpages[:4] 26 27 x_max = max(page.BBox[2] for page in pages) 28 y_max = max(page.BBox[3] for page in pages) 29 30 canvas.setPageSize((x_max, y_max)) 31 32 for index, page in enumerate(pages): 33 x = x_max * (index & 1) / 2.0 34 y = y_max * (index <= 1) / 2.0 35 canvas.saveState() 36 canvas.translate(x, y) 37 canvas.scale(0.5, 0.5) 38 canvas.doForm(makerl(canvas, page)) 39 canvas.restoreState() 40 canvas.showPage() 41 42 43def go(argv): 44 inpfn, = argv 45 outfn = '4up.' + os.path.basename(inpfn) 46 47 pages = PdfReader(inpfn).pages 48 pages = [pagexobj(x) for x in pages] 49 canvas = Canvas(outfn) 50 51 while pages: 52 addpage(canvas, pages) 53 canvas.save() 54 55if __name__ == '__main__': 56 go(sys.argv[1:]) 57