This was originally taken from https://superuser.com/a/1012669/894282 and then updated to be compatible with python 3.X
Requires pypdf2
to be installed.
This was originally taken from https://superuser.com/a/1012669/894282 and then updated to be compatible with python 3.X
Requires pypdf2
to be installed.
#! /usr/bin/env python | |
# Original author Nicholas Kim, modified by Yan Pashkovsky | |
# New license - GPL v3 | |
import sys | |
import time | |
from PyPDF2 import errors, PdfFileReader, PdfFileWriter | |
def eprint(*args, **kwargs): | |
"""Print to stderr | |
Taken from https://stackoverflow.com/a/14981125/7564988 | |
""" | |
print(*args, file=sys.stderr, **kwargs) | |
def get_cmdline_arguments(): | |
"""Retrieve command line arguments.""" | |
from optparse import OptionParser | |
usage_string = "%prog [-o output_name] file1, file2 [, ...]" | |
parser = OptionParser(usage_string) | |
parser.add_option( | |
"-o", "--output", | |
dest="output_filename", | |
default=time.strftime("output_%Y%m%d_%H%M%S"), | |
help="specify output filename (exclude .pdf extension); default is current date/time stamp" | |
) | |
options, args = parser.parse_args() | |
if len(args) < 2: | |
parser.print_help() | |
sys.exit(1) | |
return options, args | |
def main(): | |
options, filenames = get_cmdline_arguments() | |
output_pdf_name = options.output_filename + ".pdf" | |
files_to_merge = [] | |
# get PDF files | |
for f in filenames: | |
try: | |
next_pdf_file = PdfFileReader(open(f, "rb")) | |
except(errors.PdfReadError): | |
eprint("%s is not a valid PDF file." % f) | |
sys.exit(1) | |
except(IOError): | |
eprint("%s could not be found." % f) | |
sys.exit(1) | |
else: | |
files_to_merge.append(next_pdf_file) | |
# merge page by page | |
output_pdf_stream = PdfFileWriter() | |
j=0 | |
k=0 | |
for f in files_to_merge: | |
for i in range(f.numPages): | |
output_pdf_stream.addPage(f.getPage(i)) | |
if i==0: | |
output_pdf_stream.addBookmark(str(filenames[k]),j) | |
j = j + 1 | |
k += 1 | |
# create output pdf file | |
try: | |
output_pdf_file = open(output_pdf_name, "wb") | |
output_pdf_stream.write(output_pdf_file) | |
finally: | |
output_pdf_file.close() | |
print("%s successfully created." % output_pdf_name) | |
if __name__ == "__main__": | |
main() |
Updated imports to work with new versions.
There were changes in the PyPDF2 library, as stated in this changelog.