Skip to content

Instantly share code, notes, and snippets.

@nuft
Created June 14, 2017 13:54
Show Gist options
  • Save nuft/786b106447fdf0b4503a1e2fbaf26c46 to your computer and use it in GitHub Desktop.
Save nuft/786b106447fdf0b4503a1e2fbaf26c46 to your computer and use it in GitHub Desktop.
Process a scan of double slides per page to single slide per page
#!/usr/bin/env python3
from PyPDF2 import PdfFileWriter, PdfFileReader
import argparse
import copy
parser = argparse.ArgumentParser()
parser.add_argument('original',
help='input PDF.',
metavar='INPUTFILE',)
parser.add_argument('output',
help='output PDF.',
metavar='OUTPUTFILE')
parser.add_argument('--start',
help='First page to add to output.',
metavar='START',
type=int)
parser.add_argument('--end',
help='Last page to add to output.',
metavar='END',
type=int)
args = parser.parse_args()
src = PdfFileReader(open(args.original, 'rb'))
out = PdfFileWriter()
if args.end:
end = args.end
else:
end = src.getNumPages()
for i in range(args.start - 1, end, 2):
# upper slide
page = copy.copy(src.getPage(i))
dim = (
page.mediaBox.getLowerLeft_x(),
(page.mediaBox.getLowerLeft_y() + page.mediaBox.getUpperRight_y())/2
)
page.mediaBox.lowerLeft = dim
out.addPage(page)
# lower slide
page = copy.copy(src.getPage(i))
dim = (
page.mediaBox.getUpperRight_x(),
(page.mediaBox.getLowerLeft_y() + page.mediaBox.getUpperRight_y())/2
)
page.mediaBox.upperRight = dim
out.addPage(page)
out.write(open(args.output, 'wb'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment