├── README.md └── powerpoint to pdf and pdf combiner.py /README.md: -------------------------------------------------------------------------------- 1 | # pdfcombiner-and-converter- 2 | python PDF combiner and converter 3 | -------------------------------------------------------------------------------- /powerpoint to pdf and pdf combiner.py: -------------------------------------------------------------------------------- 1 | import os 2 | import win32com.client 3 | import PyPDF2 4 | import tkinter as tk 5 | from tkinter import filedialog, messagebox, ttk 6 | 7 | # PowerPoint to PDF conversion function 8 | def convert_ppt_to_pdf(ppt_path, pdf_path): 9 | powerpoint = win32com.client.Dispatch("PowerPoint.Application") 10 | powerpoint.WindowState = 2 # Minimize the PowerPoint application window 11 | 12 | try: 13 | presentation = powerpoint.Presentations.Open(ppt_path, WithWindow=False) 14 | presentation.SaveAs(pdf_path, FileFormat=32) # 32 is the file format for PDFs 15 | presentation.Close() 16 | print(f"Converted {ppt_path} to {pdf_path}") 17 | except Exception as e: 18 | print(f"Error: {e}") 19 | finally: 20 | powerpoint.Quit() 21 | 22 | # Bulk PowerPoint to PDF conversion function 23 | def bulk_convert_ppt_to_pdf(input_folder, output_folder): 24 | if not os.path.exists(output_folder): 25 | os.makedirs(output_folder) 26 | 27 | for filename in os.listdir(input_folder): 28 | if filename.endswith(".ppt") or filename.endswith(".pptx"): 29 | ppt_path = os.path.join(input_folder, filename) 30 | pdf_path = os.path.join(output_folder, os.path.splitext(filename)[0] + '.pdf') 31 | convert_ppt_to_pdf(ppt_path, pdf_path) 32 | 33 | # PDF combining function 34 | def combine_pdfs(pdf_list, output_directory, output_filename): 35 | pdf_writer = PyPDF2.PdfWriter() 36 | 37 | try: 38 | for pdf in pdf_list: 39 | pdf_reader = PyPDF2.PdfReader(pdf) 40 | for page_num in range(len(pdf_reader.pages)): 41 | page = pdf_reader.pages[page_num] 42 | pdf_writer.add_page(page) 43 | 44 | output_path = os.path.join(output_directory, output_filename) 45 | with open(output_path, 'wb') as out_pdf: 46 | pdf_writer.write(out_pdf) 47 | print(f"Combined PDFs saved as {output_path}") 48 | return True, output_path 49 | except Exception as e: 50 | print(f"Error combining PDFs: {e}") 51 | return False, None 52 | 53 | class PDFConverterApp: 54 | def __init__(self, root): 55 | self.root = root 56 | self.root.title("PowerPoint to PDF and PDF Combiner") 57 | 58 | self.notebook = ttk.Notebook(root) 59 | self.notebook.pack(padx=10, pady=10, expand=True) 60 | 61 | self.create_convert_tab() 62 | self.create_combine_tab() 63 | 64 | def create_convert_tab(self): 65 | convert_tab = ttk.Frame(self.notebook) 66 | self.notebook.add(convert_tab, text="Convert PowerPoint to PDF") 67 | 68 | self.input_folder_convert = "" 69 | self.output_folder_convert = "" 70 | 71 | input_button = tk.Button(convert_tab, text="Select Input Folder", command=self.select_input_folder_convert) 72 | input_button.pack(pady=5) 73 | 74 | output_button = tk.Button(convert_tab, text="Select Output Folder", command=self.select_output_folder_convert) 75 | output_button.pack(pady=5) 76 | 77 | convert_button = tk.Button(convert_tab, text="Convert", command=self.convert) 78 | convert_button.pack(pady=20) 79 | 80 | def select_input_folder_convert(self): 81 | self.input_folder_convert = filedialog.askdirectory(title="Select Folder Containing PowerPoint Files").replace('/', '\\') 82 | if self.input_folder_convert: 83 | messagebox.showinfo("Selected Input Folder", f"Input Folder: {self.input_folder_convert}") 84 | 85 | def select_output_folder_convert(self): 86 | self.output_folder_convert = filedialog.askdirectory(title="Select Folder to Save PDF Files").replace('/', '\\') 87 | if self.output_folder_convert: 88 | messagebox.showinfo("Selected Output Folder", f"Output Folder: {self.output_folder_convert}") 89 | 90 | def convert(self): 91 | if not self.input_folder_convert or not self.output_folder_convert: 92 | messagebox.showwarning("Missing Folders", "Please select both input and output folders.") 93 | return 94 | 95 | bulk_convert_ppt_to_pdf(self.input_folder_convert, self.output_folder_convert) 96 | messagebox.showinfo("Conversion Complete", "All PowerPoint files have been converted to PDF.") 97 | 98 | def create_combine_tab(self): 99 | combine_tab = ttk.Frame(self.notebook) 100 | self.notebook.add(combine_tab, text="Combine PDFs") 101 | 102 | self.pdf_list = [] 103 | self.output_directory_combine = "" 104 | self.output_filename = "combined.pdf" 105 | 106 | select_button = tk.Button(combine_tab, text="Select PDFs", command=self.select_pdfs) 107 | select_button.pack(pady=5) 108 | 109 | output_button = tk.Button(combine_tab, text="Select Output Directory", command=self.select_output_directory_combine) 110 | output_button.pack(pady=5) 111 | 112 | self.output_label = tk.Label(combine_tab, text="No output directory selected") 113 | self.output_label.pack(pady=5) 114 | 115 | combine_button = tk.Button(combine_tab, text="Combine PDFs", command=self.combine_pdfs) 116 | combine_button.pack(pady=20) 117 | 118 | def select_pdfs(self): 119 | self.pdf_list = filedialog.askopenfilenames(title="Select PDF Files", filetypes=[("PDF files", "*.pdf")]) 120 | if self.pdf_list: 121 | pdf_names = "\n".join(self.pdf_list) 122 | messagebox.showinfo("Selected PDFs", f"Selected Files:\n{pdf_names}") 123 | 124 | def select_output_directory_combine(self): 125 | self.output_directory_combine = filedialog.askdirectory(title="Select Output Directory") 126 | if self.output_directory_combine: 127 | self.output_label.config(text=f"Output Directory: {self.output_directory_combine}") 128 | 129 | def combine_pdfs(self): 130 | if not self.pdf_list: 131 | messagebox.showwarning("No PDFs Selected", "Please select PDF files to combine.") 132 | return 133 | 134 | if not self.output_directory_combine: 135 | messagebox.showwarning("No Output Directory Selected", "Please select an output directory.") 136 | return 137 | 138 | output_filename = filedialog.asksaveasfilename(defaultextension=".pdf", filetypes=[("PDF files", "*.pdf")], title="Save Combined PDF As", initialdir=self.output_directory_combine, initialfile=self.output_filename) 139 | if not output_filename: 140 | return 141 | 142 | success, output_path = combine_pdfs(self.pdf_list, self.output_directory_combine, os.path.basename(output_filename)) 143 | if success: 144 | messagebox.showinfo("PDF Combine Complete", f"Combined PDF saved as {output_path}") 145 | self.output_label.config(text=f"Output File: {output_path}") 146 | else: 147 | messagebox.showerror("Error", "Failed to combine PDF files.") 148 | 149 | if __name__ == "__main__": 150 | root = tk.Tk() 151 | app = PDFConverterApp(root) 152 | root.mainloop() 153 | --------------------------------------------------------------------------------