from PIL import Image import os import PyPDF2 def merge_pdfs_from_folder(folder_path): """ Merges all PDF files in a given folder into a single PDF and saves it in the same folder. :param folder_path: Path to the folder containing PDF files. """ folder_name = os.path.basename(os.path.normpath(folder_path)) # Get folder name folder_name = folder_name.replace("output", "").strip("_- ") # Remove "output" and clean up output_filename = f"merged_{folder_name}.pdf" if folder_name else "merged.pdf" output_path = os.path.join(folder_path, output_filename) merger = PyPDF2.PdfMerger() # Get a list of all PDF files in the folder, sorted by name pdf_files = sorted([f for f in os.listdir(folder_path) if f.endswith(".pdf")]) if not pdf_files: print("No PDF files found in the folder.") return for pdf in pdf_files: pdf_path = os.path.join(folder_path, pdf) merger.append(pdf_path) print(f"Added: {pdf}") merger.write(output_path) merger.close() print(f"Merged PDF saved as: {output_path}") def images_to_pdf(image_folder, output_pdf): """Converts all images in a folder to a single PDF.""" images = [] for file in sorted(os.listdir(image_folder)): if file.lower().endswith(('png', 'jpg', 'jpeg', 'bmp', 'gif')): img_path = os.path.join(image_folder, file) img = Image.open(img_path).convert('RGB') images.append(img) if images: images[0].save(output_pdf, save_all=True, append_images=images[1:]) print(f"PDF saved as {output_pdf}") else: print("No images found in the folder.") def process_main_folder(main_folder, output_folder): """Processes each subfolder in the main folder and creates a PDF for each.""" if not os.path.exists(output_folder): os.makedirs(output_folder) for subfolder in sorted(os.listdir(main_folder)): subfolder_path = os.path.join(main_folder, subfolder) if os.path.isdir(subfolder_path): output_pdf = os.path.join(output_folder, f"{subfolder}.pdf") images_to_pdf(subfolder_path, output_pdf) def rename_folder_path(folder_path): """Renames the folder by adding 'output-' as a prefix if not already present.""" folder_name = os.path.basename(folder_path) # Get only the folder name parent_dir = os.path.dirname(folder_path) # Get the parent directory path # Ensure 'output-' is not duplicated new_folder_name = folder_name if folder_name.startswith("output-") else f"output-{folder_name}" return os.path.join(parent_dir, new_folder_name) # Return the new full path def main(main_folder): output_folder = rename_folder_path(main_folder) process_main_folder(main_folder, output_folder) merge_pdfs_from_folder(output_folder) return output_folder if __name__ == "__main__": main_folder = 'boarding-diary-uncensored' main(main_folder)