Saturday, August 27, 2016¶
Today we (my family and I) will fly back home. I wanted a paper copy of our boarding passes, but without the lower part which contains only publicity. I installed PyPDF2 and wrote the following script:
from __future__ import print_function
from PyPDF2 import PdfFileWriter, PdfFileReader
from argh import dispatch_command, arg, CommandError
@dispatch_command
@arg('filenames', help="The pdf files to crop.")
@arg('--bottom',
default=None,
help='Height of bottom area to crop. Default is half of page.')
def main(bottom=None, *filenames):
output = PdfFileWriter()
for filename in filenames:
pdfin = PdfFileReader(open(filename, "rb"))
# print how many pages pdfin has:
print("{} has {} pages.".format(filename, pdfin.getNumPages()))
for p in pdfin.pages:
mb = p.mediaBox
# print(mb)
b = bottom or (mb.getUpperRight_y() / 2)
# p.mediaBox.upperRight = (
mb.lowerRight = (mb.getLowerRight_x(), b)
mb.lowerLeft = (mb.getLowerLeft_x(), b)
output.addPage(p)
output.write(file("output.pdf", "wb"))
The script produced appearently what I want, but in the printout the cropped area then showed up again. IOW it needs more work, but I won’t do this now since I have my paper copies for this time.