Appending Pages to a PDF with Python
One of my customers created ~950 PDF’s of….something flood and letter related. I don’t know what exactly. Hey man, I just work the shovel.
Anyways, they decided to tack a disclaimer on each of them after the PDF’s were made, and rather than appending them by hand * 950 I told them I’d see if I could automate it for them. I nabbed PyPdf, wrote a little Python script, and tacked the disclaimer page on the front of all ~950 of them in about 2 minutes. I thought I’d post the code here in case anybody ran across a similar need.
Note PyPdf will raise a few deprication warnings if you’re on Python 2.6. You can safely ignore those unless you’re on or heading to 3.0.
# This takes a single PDF page from one PDF document and appends it to # the front of an existing document, saving the new document as a new # copy in another folder. Requires the pyPDF extension. You will also need to # tell the script the location of the cover page, the folder that contains the # PDF files to append it to, and an output folder for the modified files. import os from pyPdf import PdfFileWriter, PdfFileReader print "Beginning conversion...." # Set the cover to append to the front of the docs inputcover = PdfFileReader(file("ELEVATION CERTIFICATE DISCLAIMER.pdf", "rb")) # Loop through the source directory to get the PDF files and convert them # Change the source directory here as needed dirList=os.listdir("source") for fname in dirList: if fname.endswith(".pdf"): print "Processing " + str(fname) + "...." # set up the pdfwriter and the input source output = PdfFileWriter() inputFile = "source/" + str(fname) input1 = PdfFileReader(file(inputFile, "rb")) # add the cover page to the PDF output output.addPage(inputcover.getPage(0)) # add the rest of the pages to the PDf output for i in range (0, input1.getNumPages() ): output.addPage(input1.getPage(i)) # write the output file - change output folder as needed outputFile = "output/" + str(fname) outputStream = file(outputFile, "wb") output.write(outputStream) outputStream.close() print "Conversion complete."