#Merge PDF files using pyPDF2 ''' Usage: python3 pdfMergeFiles.py -h or python3 pdfMergeFiles.py files -f file_1.pdf file_2.pdf ... or python3 pdfMergeFiles.py folder -d . or python3 pdfMergeFiles.py folder -d folder_with_PDF ''' from PyPDF2 import PdfFileReader, PdfFileWriter, PdfFileMerger import sys, os, argparse def mergePDF(all_in_folder, file_names, folderPath='.'): # all_in_folder = 0, specify file names on the command line # all_in_folder = 1, specify folder path containing PDF file inpdf = [] if all_in_folder == 0: for pdf in file_names: inpdf.append(PdfFileReader(pdf)) else: if folderPath == '.': folder_with_PDF = os.getcwd() else: folder_with_PDF = os.getcwd()+"/"+folderPath files_in_folder = [f for f in os.listdir(folder_with_PDF)] if(len(files_in_folder) <= 1): print("\nEither single PDF or no PDF file found, exiting!\n") sys.exit() for f in files_in_folder: full_path = os.path.join(folder_with_PDF, f) if os.path.isfile(full_path): extn = f.split('.')[-1] if (extn.upper() == "PDF"): inpdf.append(PdfFileReader(full_path)) new_file = os.getcwd() + "/" + "Merged_File.pdf" out_pdf = PdfFileWriter() for pdf_file in inpdf: for k in range(pdf_file.getNumPages()): p = pdf_file.getPage(k) out_pdf.addPage(p) with open(new_file, 'wb') as merged_pdf_file: out_pdf.write(merged_pdf_file) # ----------------------------------------------------------------------------- # Create the top-level parser parser = argparse.ArgumentParser() subparsers = parser.add_subparsers(dest="command") # Create the (sub) parser for the 'files' command parser_files = subparsers.add_parser('files', help="Merge files specified on command line") parser_files.add_argument('-f', nargs='*') # Create the (sub) parser for the 'folder' command parser_folder = subparsers.add_parser('folder', help="Merge PDF files in specified directory") parser_folder.add_argument('-d', nargs=1) # Parse the arguments and call whatever function was specified on command line args = parser.parse_args() if args.command == 'files': if args.f: mergePDF(0, args.f) elif args.command == 'folder': if args.d: mergePDF(1, args.d[0]) else: print("\n ---No sub-command name provided. \n")