فهرست منبع

feat:add advice on LibreOffice installing

Doge2077 7 ماه پیش
والد
کامیت
039f8cbfde
1فایلهای تغییر یافته به همراه49 افزوده شده و 5 حذف شده
  1. 49 5
      magic_pdf/utils/office_to_pdf.py

+ 49 - 5
magic_pdf/utils/office_to_pdf.py

@@ -2,6 +2,7 @@ import os
 import subprocess
 import platform
 from pathlib import Path
+import shutil
 
 
 class ConvertToPdfError(Exception):
@@ -43,19 +44,62 @@ def check_fonts_installed():
 
 def get_soffice_command():
     """Return the path to LibreOffice's soffice executable depending on the platform."""
-    if platform.system() == 'Windows':
+    system_type = platform.system()
+
+    # First check if soffice is in PATH
+    soffice_path = shutil.which('soffice')
+    if soffice_path:
+        return soffice_path
+
+    if system_type == 'Windows':
+        # Check common installation paths
         possible_paths = [
-            Path("C:/Program Files/LibreOffice/program/soffice.exe"),
-            Path("C:/Program Files (x86)/LibreOffice/program/soffice.exe")
+            Path(os.environ.get('PROGRAMFILES', 'C:/Program Files')) / 'LibreOffice/program/soffice.exe',
+            Path(os.environ.get('PROGRAMFILES(X86)', 'C:/Program Files (x86)')) / 'LibreOffice/program/soffice.exe',
+            Path('C:/Program Files/LibreOffice/program/soffice.exe'),
+            Path('C:/Program Files (x86)/LibreOffice/program/soffice.exe')
         ]
+
+        # Check other drives for windows
+        for drive in ['C:', 'D:', 'E:', 'F:', 'G:', 'H:']:
+            possible_paths.append(Path(f"{drive}/LibreOffice/program/soffice.exe"))
+
         for path in possible_paths:
             if path.exists():
                 return str(path)
+
         raise ConvertToPdfError(
-            "LibreOffice not found. Please install LibreOffice and ensure soffice.exe is located in a standard path."
+            "LibreOffice not found. Please install LibreOffice from https://www.libreoffice.org/ "
+            "or ensure soffice.exe is in your PATH environment variable."
         )
     else:
-        return 'soffice'  # Assume it's in PATH on Linux/macOS
+        # For Linux/macOS, provide installation instructions if not found
+        try:
+            # Try to find soffice in standard locations
+            possible_paths = [
+                '/usr/bin/soffice',
+                '/usr/local/bin/soffice',
+                '/opt/libreoffice/program/soffice',
+                '/Applications/LibreOffice.app/Contents/MacOS/soffice'
+            ]
+            for path in possible_paths:
+                if os.path.exists(path):
+                    return path
+
+            # Last attempt with which
+            soffice_path = shutil.which('soffice')
+            if soffice_path:
+                return soffice_path
+
+            raise ConvertToPdfError(
+                "LibreOffice not found. Please install it:\n"
+                "  - Ubuntu/Debian: sudo apt-get install libreoffice\n"
+                "  - CentOS/RHEL: sudo yum install libreoffice\n"
+                "  - macOS: brew install libreoffice or download from https://www.libreoffice.org/\n"
+                "  - Or ensure soffice is in your PATH environment variable."
+            )
+        except Exception as e:
+            raise ConvertToPdfError(f"Error locating LibreOffice: {str(e)}")
 
 
 def convert_file_to_pdf(input_path, output_dir):