""" PPTX to PDF converter using LibreOffice for high-quality conversion This module provides the essential function to convert PowerPoint presentations to PDF using LibreOffice headless mode for professional-grade quality. The converted PDF is then processed by the main upload workflow for 4K image generation. """ import os import subprocess import logging # Set up logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def pptx_to_pdf_libreoffice(pptx_path, output_dir): """ Convert PPTX to PDF using LibreOffice for highest quality. This function is the core component of the PPTX processing workflow: PPTX → PDF (this function) → 4K JPG images (handled in uploads.py) Args: pptx_path (str): Path to the PPTX file output_dir (str): Directory to save the PDF Returns: str: Path to the generated PDF file, or None if conversion failed """ try: # Ensure output directory exists os.makedirs(output_dir, exist_ok=True) # Use LibreOffice to convert PPTX to PDF cmd = [ 'libreoffice', '--headless', '--convert-to', 'pdf', '--outdir', output_dir, pptx_path ] logger.info(f"Converting PPTX to PDF using LibreOffice: {pptx_path}") result = subprocess.run(cmd, capture_output=True, text=True, timeout=120) if result.returncode != 0: logger.error(f"LibreOffice conversion failed: {result.stderr}") return None # Find the generated PDF file base_name = os.path.splitext(os.path.basename(pptx_path))[0] pdf_path = os.path.join(output_dir, f"{base_name}.pdf") if os.path.exists(pdf_path): logger.info(f"PDF conversion successful: {pdf_path}") return pdf_path else: logger.error(f"PDF file not found after conversion: {pdf_path}") return None except subprocess.TimeoutExpired: logger.error("LibreOffice conversion timed out (120s)") return None except Exception as e: logger.error(f"Error in PPTX to PDF conversion: {e}") return None if __name__ == "__main__": # Test the converter import sys if len(sys.argv) > 1: test_pptx = sys.argv[1] if os.path.exists(test_pptx): output_dir = "test_output" pdf_result = pptx_to_pdf_libreoffice(test_pptx, output_dir) if pdf_result: print(f"Successfully converted PPTX to PDF: {pdf_result}") else: print("PPTX to PDF conversion failed") else: print(f"File not found: {test_pptx}") else: print("Usage: python pptx_converter.py ")