|
|
|
|
|
"""
|
|
|
Local runner for DOCX to PDF converter with Arabic support
|
|
|
Run this script to test the converter locally before deploying to Hugging Face Spaces
|
|
|
"""
|
|
|
|
|
|
import subprocess
|
|
|
import sys
|
|
|
import os
|
|
|
from pathlib import Path
|
|
|
|
|
|
def check_system_requirements():
|
|
|
"""Check if all system requirements are installed"""
|
|
|
print("🔍 Checking system requirements...")
|
|
|
|
|
|
requirements = {
|
|
|
"LibreOffice": ["libreoffice", "--version"],
|
|
|
"Font Cache": ["fc-cache", "--version"],
|
|
|
"Font List": ["fc-list", "--help"]
|
|
|
}
|
|
|
|
|
|
missing = []
|
|
|
for name, cmd in requirements.items():
|
|
|
try:
|
|
|
result = subprocess.run(cmd, capture_output=True, timeout=5)
|
|
|
if result.returncode == 0:
|
|
|
print(f"✅ {name}: Available")
|
|
|
else:
|
|
|
print(f"❌ {name}: Not working properly")
|
|
|
missing.append(name)
|
|
|
except (subprocess.TimeoutExpired, FileNotFoundError):
|
|
|
print(f"❌ {name}: Not found")
|
|
|
missing.append(name)
|
|
|
|
|
|
if missing:
|
|
|
print(f"\n⚠️ Missing requirements: {', '.join(missing)}")
|
|
|
print("\nTo install on Ubuntu/Debian:")
|
|
|
print("sudo apt-get update")
|
|
|
print("sudo apt-get install libreoffice libreoffice-writer fonts-liberation fonts-dejavu fonts-noto fontconfig")
|
|
|
return False
|
|
|
|
|
|
print("✅ All system requirements are available")
|
|
|
return True
|
|
|
|
|
|
def install_python_requirements():
|
|
|
"""Install Python requirements"""
|
|
|
print("\n📦 Installing Python requirements...")
|
|
|
try:
|
|
|
subprocess.run([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"],
|
|
|
check=True)
|
|
|
print("✅ Python requirements installed successfully")
|
|
|
return True
|
|
|
except subprocess.CalledProcessError as e:
|
|
|
print(f"❌ Failed to install Python requirements: {e}")
|
|
|
return False
|
|
|
|
|
|
def setup_arabic_fonts():
|
|
|
"""Setup Arabic fonts if the script exists"""
|
|
|
script_path = Path("arabic_fonts_setup.sh")
|
|
|
if script_path.exists():
|
|
|
print("\n🔤 Setting up Arabic fonts...")
|
|
|
try:
|
|
|
|
|
|
os.chmod(script_path, 0o755)
|
|
|
subprocess.run(["bash", str(script_path)], check=True)
|
|
|
print("✅ Arabic fonts setup completed")
|
|
|
return True
|
|
|
except subprocess.CalledProcessError as e:
|
|
|
print(f"⚠️ Arabic fonts setup failed: {e}")
|
|
|
print("Continuing without additional Arabic fonts...")
|
|
|
return False
|
|
|
else:
|
|
|
print("⚠️ Arabic fonts setup script not found, skipping...")
|
|
|
return False
|
|
|
|
|
|
def run_app():
|
|
|
"""Run the main application"""
|
|
|
print("\n🚀 Starting DOCX to PDF converter...")
|
|
|
print("The application will be available at: http://localhost:7860")
|
|
|
print("Press Ctrl+C to stop the application")
|
|
|
|
|
|
try:
|
|
|
subprocess.run([sys.executable, "app.py"], check=True)
|
|
|
except KeyboardInterrupt:
|
|
|
print("\n👋 Application stopped by user")
|
|
|
except subprocess.CalledProcessError as e:
|
|
|
print(f"❌ Application failed to start: {e}")
|
|
|
|
|
|
def main():
|
|
|
"""Main function"""
|
|
|
print("🔧 DOCX to PDF Converter - Local Setup")
|
|
|
print("=" * 50)
|
|
|
|
|
|
|
|
|
if not check_system_requirements():
|
|
|
print("\n❌ System requirements not met. Please install missing components.")
|
|
|
return 1
|
|
|
|
|
|
|
|
|
if not install_python_requirements():
|
|
|
print("\n❌ Failed to install Python requirements.")
|
|
|
return 1
|
|
|
|
|
|
|
|
|
setup_arabic_fonts()
|
|
|
|
|
|
|
|
|
run_app()
|
|
|
|
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
sys.exit(main())
|
|
|
|