Skip to content

Instantly share code, notes, and snippets.

@elPytel
Created April 21, 2023 13:31
Show Gist options
  • Save elPytel/9bc030724cfb422a4a4ae24151ebe878 to your computer and use it in GitHub Desktop.
Save elPytel/9bc030724cfb422a4a4ae24151ebe878 to your computer and use it in GitHub Desktop.
Simple python script for merging .PDF files.
# By Pytel & Copilot
"""
Tento program slouží k sloučení PDF souborů do jednoho.
Použití:
python main.py -f "./PDFs" -o "merged.pdf"
Parametry:
-f --folder složka s PDF soubory
-o --output výstupní soubor
-h --help nápověda
-D --debug ladící výstup
-V --verbose podrobný výstup
"""
folder = "PDFs"
import os
import argparse
from PyPDF2 import PdfMerger, PdfReader
def get_pdfs_from_folder(folder):
""" Get pdfs from folder. """
pdfs = []
if not os.path.isdir(folder):
raise Exception("Folder {} does not exist.".format(folder))
for file in os.listdir(folder):
if file.endswith(".pdf"):
pdfs.append(os.path.join(folder, file))
return pdfs
def merge_pdfs(pdfs, final_name: str ="merged.pdf"):
""" Merge pdfs. """
merger = PdfMerger()
for pdf in pdfs:
if not os.path.isfile(pdf):
raise Exception("File {} does not exist.".format(pdf))
else:
merger.append(PdfReader(open(pdf, 'rb')))
merger.write(final_name)
merger.close()
def main(args):
""" Main function. """
VERBOSE = args.verbose
DEBUG = args.debug
if args.folder:
folder = args.folder
else:
raise Exception("No folder specified.")
if args.output:
output = args.output
else:
print("No output specified. Using default output: merged.pdf")
output = "merged.pdf"
print("Getting PDFs from folder...") if VERBOSE else None
pdfs = get_pdfs_from_folder(folder)
print("Merging PDFs...") if VERBOSE else None
merge_pdfs(pdfs, output)
print("Done.")
def config_parser():
""" Config parser. """
parser = argparse.ArgumentParser(description='Merge PDFs.')
parser.add_argument('-f', '--folder', help='folder with PDFs')
parser.add_argument('-o', '--output', help='output file')
parser.add_argument('-D', '--debug', help='debug output', action='store_true')
parser.add_argument('-V', '--verbose', help='verbose output', action='store_true')
return parser
if __name__ == "__main__":
parser = config_parser()
args = parser.parse_args()
try:
main(args)
except Exception as e:
print("Error:", e)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment