移除office-plugin, 使用新版jodconverter
This commit is contained in:
99
server/src/main/java/cn/keking/utils/ConfigUtils.java
Normal file
99
server/src/main/java/cn/keking/utils/ConfigUtils.java
Normal file
@ -0,0 +1,99 @@
|
||||
package cn.keking.utils;
|
||||
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* @author : kl
|
||||
**/
|
||||
public class ConfigUtils {
|
||||
|
||||
private static final String MAIN_DIRECTORY_NAME = "server";
|
||||
|
||||
public static String getHomePath() {
|
||||
String userDir = System.getenv("KKFILEVIEW_BIN_FOLDER");
|
||||
if (userDir == null) {
|
||||
userDir = System.getProperty("user.dir");
|
||||
}
|
||||
if (userDir.endsWith("bin")) {
|
||||
userDir = userDir.substring(0, userDir.length() - 4);
|
||||
} else {
|
||||
String separator = File.separator;
|
||||
if (userDir.endsWith(MAIN_DIRECTORY_NAME)) {
|
||||
userDir = userDir + separator + "src" + separator + "main";
|
||||
} else {
|
||||
userDir = userDir + separator + MAIN_DIRECTORY_NAME + separator + "src" + separator + "main";
|
||||
}
|
||||
}
|
||||
return userDir;
|
||||
}
|
||||
|
||||
// 获取环境变量,如果找不到则返回默认值
|
||||
@SuppressWarnings("SameParameterValue")
|
||||
private static String getEnvOrDefault(String key, String def) {
|
||||
String value = System.getenv(key);
|
||||
return value == null ? def : value;
|
||||
}
|
||||
|
||||
// 返回参数列表中第一个真实存在的路径,或者 null
|
||||
private static String firstExists(File... paths) {
|
||||
for (File path : paths) {
|
||||
if (path.exists()) {
|
||||
return path.getAbsolutePath();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getUserDir() {
|
||||
String userDir = System.getProperty("user.dir");
|
||||
String binFolder = getEnvOrDefault("KKFILEVIEW_BIN_FOLDER", userDir);
|
||||
|
||||
File pluginPath = new File(binFolder);
|
||||
|
||||
// 如果指定了 bin 或其父目录,则返回父目录
|
||||
if (new File(pluginPath, "bin").exists()) {
|
||||
return pluginPath.getAbsolutePath();
|
||||
|
||||
} else if (pluginPath.exists() && pluginPath.getName().equals("bin")) {
|
||||
return pluginPath.getParentFile().getAbsolutePath();
|
||||
|
||||
} else {
|
||||
return firstExists(new File(pluginPath, MAIN_DIRECTORY_NAME),
|
||||
new File(pluginPath.getParentFile(), MAIN_DIRECTORY_NAME));
|
||||
}
|
||||
}
|
||||
|
||||
public static String getCustomizedConfigPath() {
|
||||
String homePath = getHomePath();
|
||||
String separator = java.io.File.separator;
|
||||
return homePath + separator + "config" + separator + "application.properties";
|
||||
}
|
||||
|
||||
public synchronized static void restorePropertiesFromEnvFormat(Properties properties) {
|
||||
Iterator<Map.Entry<Object, Object>> iterator = properties.entrySet().iterator();
|
||||
while (iterator.hasNext()) {
|
||||
Map.Entry<Object, Object> entry = iterator.next();
|
||||
String key = entry.getKey().toString();
|
||||
String value = entry.getValue().toString();
|
||||
if (value.trim().startsWith("${") && value.trim().endsWith("}")) {
|
||||
int beginIndex = value.indexOf(":");
|
||||
if (beginIndex < 0) {
|
||||
beginIndex = value.length() - 1;
|
||||
}
|
||||
int endIndex = value.length() - 1;
|
||||
String envKey = value.substring(2, beginIndex);
|
||||
String envValue = System.getenv(envKey);
|
||||
if (envValue == null || "".equals(envValue.trim())) {
|
||||
value = value.substring(beginIndex + 1, endIndex);
|
||||
} else {
|
||||
value = envValue;
|
||||
}
|
||||
properties.setProperty(key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
111
server/src/main/java/cn/keking/utils/LocalOfficeUtils.java
Normal file
111
server/src/main/java/cn/keking/utils/LocalOfficeUtils.java
Normal file
@ -0,0 +1,111 @@
|
||||
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 + "windows-office",
|
||||
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",
|
||||
"/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