update
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
package cn.keking.utils;
|
||||
|
||||
import org.jodconverter.core.util.OSUtils;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Properties;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author chenjh
|
||||
* @since 2022-12-15
|
||||
*/
|
||||
public class LocalOfficeUtils {
|
||||
|
||||
public static final String OFFICE_HOME_KEY = "office.home";
|
||||
public static final String DEFAULT_OFFICE_HOME_VALUE = "default";
|
||||
|
||||
private static final String EXECUTABLE_DEFAULT = "program/soffice.bin";
|
||||
private static final String EXECUTABLE_MAC = "program/soffice";
|
||||
private static final String EXECUTABLE_MAC_41 = "MacOS/soffice";
|
||||
private static final String EXECUTABLE_WINDOWS = "program/soffice.exe";
|
||||
|
||||
public static File getDefaultOfficeHome() {
|
||||
Properties properties = new Properties();
|
||||
String customizedConfigPath = ConfigUtils.getCustomizedConfigPath();
|
||||
try {
|
||||
BufferedReader bufferedReader = new BufferedReader(new FileReader(customizedConfigPath));
|
||||
properties.load(bufferedReader);
|
||||
ConfigUtils.restorePropertiesFromEnvFormat(properties);
|
||||
} catch (Exception ignored) {}
|
||||
String officeHome = properties.getProperty(OFFICE_HOME_KEY);
|
||||
if (officeHome != null && !DEFAULT_OFFICE_HOME_VALUE.equals(officeHome)) {
|
||||
return new File(officeHome);
|
||||
}
|
||||
if (OSUtils.IS_OS_WINDOWS) {
|
||||
String userDir = ConfigUtils.getUserDir();
|
||||
// Try to find the most recent version of LibreOffice or OpenOffice,
|
||||
// starting with the 64-bit version. %ProgramFiles(x86)% on 64-bit
|
||||
// machines; %ProgramFiles% on 32-bit ones
|
||||
final String programFiles64 = System.getenv("ProgramFiles");
|
||||
final String programFiles32 = System.getenv("ProgramFiles(x86)");
|
||||
return findOfficeHome(EXECUTABLE_WINDOWS,
|
||||
userDir + File.separator + "LibreOfficePortable" + File.separator + "App" + File.separator + "libreoffice",
|
||||
programFiles32 + File.separator + "LibreOffice",
|
||||
programFiles64 + File.separator + "LibreOffice 7",
|
||||
programFiles32 + File.separator + "LibreOffice 7",
|
||||
programFiles64 + File.separator + "LibreOffice 6",
|
||||
programFiles32 + File.separator + "LibreOffice 6",
|
||||
programFiles64 + File.separator + "LibreOffice 5",
|
||||
programFiles32 + File.separator + "LibreOffice 5",
|
||||
programFiles64 + File.separator + "LibreOffice 4",
|
||||
programFiles32 + File.separator + "LibreOffice 4",
|
||||
programFiles32 + File.separator + "OpenOffice 4",
|
||||
programFiles64 + File.separator + "LibreOffice 3",
|
||||
programFiles32 + File.separator + "LibreOffice 3",
|
||||
programFiles32 + File.separator + "OpenOffice.org 3");
|
||||
} else if (OSUtils.IS_OS_MAC) {
|
||||
File homeDir = findOfficeHome(EXECUTABLE_MAC_41,
|
||||
"/Applications/LibreOffice.app/Contents",
|
||||
"/Applications/OpenOffice.app/Contents",
|
||||
"/Applications/OpenOffice.org.app/Contents");
|
||||
|
||||
if (homeDir == null) {
|
||||
homeDir = findOfficeHome(EXECUTABLE_MAC,
|
||||
"/Applications/LibreOffice.app/Contents",
|
||||
"/Applications/OpenOffice.app/Contents",
|
||||
"/Applications/OpenOffice.org.app/Contents");
|
||||
}
|
||||
return homeDir;
|
||||
} else {
|
||||
// Linux or other *nix variants
|
||||
return findOfficeHome(EXECUTABLE_DEFAULT,
|
||||
"/opt/libreoffice6.0",
|
||||
"/opt/libreoffice6.1",
|
||||
"/opt/libreoffice6.2",
|
||||
"/opt/libreoffice6.3",
|
||||
"/opt/libreoffice6.4",
|
||||
"/opt/libreoffice7.0",
|
||||
"/opt/libreoffice7.1",
|
||||
"/opt/libreoffice7.2",
|
||||
"/opt/libreoffice7.3",
|
||||
"/opt/libreoffice7.4",
|
||||
"/opt/libreoffice7.5",
|
||||
"/opt/libreoffice7.6",
|
||||
"/usr/lib64/libreoffice",
|
||||
"/usr/lib/libreoffice",
|
||||
"/usr/local/lib64/libreoffice",
|
||||
"/usr/local/lib/libreoffice",
|
||||
"/opt/libreoffice",
|
||||
"/usr/lib64/openoffice",
|
||||
"/usr/lib64/openoffice.org3",
|
||||
"/usr/lib64/openoffice.org",
|
||||
"/usr/lib/openoffice",
|
||||
"/usr/lib/openoffice.org3",
|
||||
"/usr/lib/openoffice.org",
|
||||
"/opt/openoffice4",
|
||||
"/opt/openoffice.org3");
|
||||
}
|
||||
}
|
||||
|
||||
private static File findOfficeHome(final String executablePath, final String... homePaths) {
|
||||
return Stream.of(homePaths)
|
||||
.filter(homePath -> Files.isRegularFile(Paths.get(homePath, executablePath)))
|
||||
.findFirst()
|
||||
.map(File::new)
|
||||
.orElse(null);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user