Splitting 2up PDFs back to 1up
Sometimes you’ll get a document scanned in that has 2 pages per scanned ‘page’. It is really nice to have them put back to one page per ‘page’, undoing the 2up process. The below is adapted from here and here.
First, install the pyPdf python library by issuing python setup.py build
and sudo python setup.py install
in the unzipped library directory.
The below code will then undo the 2up. It may need to be adjusted for landscape or portrait originals and if odd and even pages have the same or differing layouts.
#!/usr/bin/env python # USAGE: ./un2up.py < in.pdf > out.pdf # It takes a 2up page and returns it to 1up # # Adapted from http://stackoverflow.com/questions/7047656/why-my-code-not-correctly-split-every-page-in-a-scanned-pdf # and http://unix.stackexchange.com/questions/12482/split-pages-in-pdf import copy, sys from pyPdf import PdfFileWriter, PdfFileReader input = PdfFileReader(sys.stdin) output = PdfFileWriter() for i in range(input.getNumPages()): p = input.getPage(i) q = copy.copy(p) bl = p.mediaBox.lowerLeft ur = p.mediaBox.upperRight print >> sys.stderr, 'splitting page',i print >> sys.stderr, '\tlowerLeft:',p.mediaBox.lowerLeft print >> sys.stderr, '\tupperRight:',p.mediaBox.upperRight # altered for landscaped 2up of portrait original p.mediaBox.upperRight = (ur[0]/2, ur[1]) p.mediaBox.lowerLeft = bl # altered for landscaped 2up of portrait original q.mediaBox.upperRight = ur q.mediaBox.lowerLeft = (ur[0]/2, bl[1]) # This bit allows adjustment if each 2up page alternates which side is odd and even if i%2==0: output.addPage(p) output.addPage(q) else: output.addPage(p) output.addPage(q) output.write(sys.stdout) |