/exam-normalizer

Make exams the correct length

Primary LanguagePythonMIT LicenseMIT

exam-normalizer

Make exams the correct length by reading a QR code on the cover sheet of each exam, using that to split exams into separate PDFs, and appending blank pages as needed to ensure all the resulting exams are the same length.

Installing

exam-normalizer is a Python script implemented in 'normalize.py'.

Prerequisites

Since exam-normalizer manipulates PDF files, it depends on an installation of the PDFTk library. In addition, you'll need to have 'zbar', a QR scanning library, installed. The Python dependencies listed in requirements.txt require these native libraries to be installed and working (see below for installing the Python dependencies).

  • Python 2 (clearly)
  • PDFTk
  • zbar
  • pip (for the next step)

Install the dependencies

In the root directory of the repository, run

pip install -r requirements.txt

to install the python libraries. Or, if you don't want to use pip, have a look in requirements.txt for the things you'll need to install.

Usage

normalize.py [-h] input_file output_file correct_page_count

Pad exams with blank pages.

positional arguments:
  input_file          the filename of the PDF of exams
  output_file         the filename prefix for the resulting PDFs of padded exams
  correct_page_count  the correct number of pages per exam

optional arguments:
  -h, --help          show this help message and exit

Usage example

Let's say I have scanned several exams into 'exams.pdf'. Each exam is supposed to have 8 pages, but students might have ripped some out. I give exam-normalizer:

  • the name of the collection of exams, followed by
  • the prefix for the PDF files it should produce, followed by
  • the correct number of pages in an exam.

In this case, to create a file called 'normalized.pdf':

./normalize.py exams.pdf normalized 8

It might take a while to run; it has to convert each page to an image and scan it for QR codes.

The output will be in two files:

  • normalized_good.pdf will have all the exams that didn't need adjustment
  • normalized_padded.pdf will have all the exams that needed additional padding pages

Credits

Emoji art supplied by Emoji One