Skip to content

Instantly share code, notes, and snippets.

@alexras
Created May 4, 2015 07:24
Show Gist options
  • Select an option

  • Save alexras/dbc6a4073a41586195a4 to your computer and use it in GitHub Desktop.

Select an option

Save alexras/dbc6a4073a41586195a4 to your computer and use it in GitHub Desktop.
Convert @jvns' strace zine into a standard PDF
#!/usr/bin/env python
import argparse
import sys
from itertools import chain, izip
from PyPDF2 import PdfFileReader, PdfFileWriter
def split_pages(zine):
pages = []
even_pdf = PdfFileReader(open(zine, 'rb'))
odd_pdf = PdfFileReader(open(zine, 'rb'))
for i in range(even_pdf.getNumPages()):
even_page = even_pdf.getPage(i)
odd_page = odd_pdf.getPage(i)
midpoint_lower = list(even_page.cropBox.lowerRight)
midpoint_upper = list(even_page.cropBox.upperRight)
midpoint_lower[0] /= 2
midpoint_upper[0] /= 2
even_page.cropBox.lowerRight = midpoint_lower
even_page.cropBox.upperRight = midpoint_upper
odd_page.cropBox.lowerLeft = midpoint_lower
odd_page.cropBox.upperLeft = midpoint_upper
even_page.mediaBox = even_page.cropBox
odd_page.mediaBox = odd_page.cropBox
pages.append((i, 'left', even_page))
pages.append((i, 'right', odd_page))
unfolded_pages = pages[-2:]
pages.pop()
pages.pop()
while len(pages) > 0:
unfolded_pages.insert(0, pages.pop())
unfolded_pages.append(pages.pop())
unfolded_pages.reverse()
unfolded_pages.reverse()
return [x[2] for x in unfolded_pages]
def zine2doc(zine, output):
output_pdf = PdfFileWriter()
for i, page in enumerate(split_pages(zine)):
output_pdf.addPage(page)
with open(output, 'wb') as fp:
output_pdf.write(fp)
def main():
parser = argparse.ArgumentParser(
description='convert a PDF in zine-style layout into one that reads '
'like a regular document')
parser.add_argument('zine', help='the zine to convert')
parser.add_argument(
'-o', '--output', default='converted.pdf',
help='the file to output')
args = parser.parse_args()
zine2doc(**vars(args))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment