57 lines
1.1 KiB
Python
Executable File
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:])
|