import argparse import os import sys import tempfile import uuid from pdf2image import convert_from_path from ppt_converter import create_pptx_from_images, reconstruct_pptx_from_zip def main(): parser = argparse.ArgumentParser(description="Convert PDF/Images with text to editable PPTX, or assemble from Colab ZIP.") parser.add_argument("input", nargs="?", help="Input PDF, image, or ZIP file path") parser.add_argument("-o", "--output", help="Output PPTX file path", default="output.pptx") parser.add_argument("--lang", help="Comma separated languages for OCR, e.g. ch_tra,en", default="ch_tra,en") parser.add_argument("--high-accuracy", action="store_true", help="Enable high accuracy OCR mode (slower but catches more small/faint text)") parser.add_argument("--zip", help="Directly assemble from a Colab ZIP package path") args = parser.parse_args() input_path = args.input zip_path = args.zip output_path = args.output lang_list = args.lang.split(",") high_accuracy = args.high_accuracy # Check if we are running in ZIP reconstruction mode if zip_path or (input_path and input_path.lower().endswith(".zip")): target_zip = zip_path if zip_path else input_path if not os.path.exists(target_zip): print(f"Error: ZIP file '{target_zip}' not found.") sys.exit(1) print(f"Assembling PPTX from ZIP package '{target_zip}'...") success = reconstruct_pptx_from_zip(target_zip, output_path) if success: print(f"Assembly completed! PPTX saved to '{output_path}'") else: print("Assembly failed.") sys.exit(1) sys.exit(0) if not input_path: parser.print_help() sys.exit(1) if not os.path.exists(input_path): print(f"Error: Input file '{input_path}' not found.") sys.exit(1) ext = os.path.splitext(input_path)[1].lower() image_paths = [] temp_dir = tempfile.mkdtemp() try: if ext == ".pdf": print(f"Converting PDF '{input_path}' to images...") try: images = convert_from_path(input_path) for i, img in enumerate(images): page_id = str(uuid.uuid4())[:8] temp_img_path = os.path.join(temp_dir, f"temp_page_{page_id}_{i}.png") img.save(temp_img_path, "PNG") image_paths.append(temp_img_path) except Exception as e: print(f"Error converting PDF. Make sure poppler is installed. Details: {e}") sys.exit(1) elif ext in [".png", ".jpg", ".jpeg", ".webp"]: image_paths = [input_path] else: print(f"Unsupported file format: {ext}") sys.exit(1) mode_str = "High Accuracy" if high_accuracy else "Standard" print(f"Starting OCR and PPTX generation ({mode_str} mode)...") create_pptx_from_images(image_paths, output_path, lang_list, high_accuracy=high_accuracy) print(f"Done! PPTX saved to '{output_path}'") finally: import shutil if temp_dir and os.path.exists(temp_dir): shutil.rmtree(temp_dir, ignore_errors=True) if __name__ == "__main__": main()