From 5888c56f1db00ddd27756fc07776393f4deeb808 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E7=B2=BE=E5=8D=8E?= <842761733@qq.com>
Date: Thu, 21 Nov 2019 17:00:07 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=BC=82=E5=B8=B8?=
=?UTF-8?q?=E5=A4=84=E7=90=86=E3=80=81=E5=BC=82=E5=B8=B8=E6=8F=90=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/cn/keking/utils/ConverterUtils.java | 82 ++++++++++++++++---
.../main/resources/web/fileNotSupported.ftl | 2 +-
2 files changed, 72 insertions(+), 12 deletions(-)
diff --git a/jodconverter-web/src/main/java/cn/keking/utils/ConverterUtils.java b/jodconverter-web/src/main/java/cn/keking/utils/ConverterUtils.java
index 4fd4db07..be407fdd 100644
--- a/jodconverter-web/src/main/java/cn/keking/utils/ConverterUtils.java
+++ b/jodconverter-web/src/main/java/cn/keking/utils/ConverterUtils.java
@@ -6,14 +6,20 @@ import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;
import org.artofsolving.jodconverter.office.OfficeUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
+import java.util.Properties;
/**
* 创建文件转换器
@@ -24,6 +30,8 @@ import java.util.Map;
@Component
public class ConverterUtils {
+ private final Logger logger = LoggerFactory.getLogger(ConverterUtils.class);
+
// @Value("${office.home}")
// String officeHome;
// OpenOfficeConnection connection;
@@ -31,18 +39,28 @@ public class ConverterUtils {
@PostConstruct
public void initOfficeManager() {
- //// connection = new SocketOpenOfficeConnection(host,8100);
-//// connection.connect();
String officeHome = OfficeUtils.getDefaultOfficeHome().getAbsolutePath();
- DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
- configuration.setOfficeHome(officeHome);
- configuration.setPortNumber(8100);
- officeManager = configuration.buildOfficeManager();
- officeManager.start();
- // 设置任务执行超时为5分钟
- // configuration.setTaskExecutionTimeout(1000 * 60 * 5L);//
- // 设置任务队列超时为24小时
- // configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);//
+ if (officeHome == null) {
+ throw new RuntimeException("找不到office组件,请确认'office.home'配置是否有误");
+ }
+ boolean killOffice = killProcess("soffice.bin");
+ if (killOffice) {
+ logger.warn("检测到有正在运行的office进程,已自动结束该进程");
+ }
+ try {
+ DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
+ configuration.setOfficeHome(officeHome);
+ configuration.setPortNumber(8100);
+ // 设置任务执行超时为5分钟
+ configuration.setTaskExecutionTimeout(1000 * 60 * 5L);
+ // 设置任务队列超时为24小时
+ //configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);
+ officeManager = configuration.buildOfficeManager();
+ officeManager.start();
+ } catch (Exception e) {
+ logger.error("启动office组件失败,请检查office组件是否可用");
+ throw e;
+ }
}
public OfficeDocumentConverter getDocumentConverter() {
@@ -60,6 +78,48 @@ public class ConverterUtils {
return loadProperties;
}
+ private boolean killProcess(String processName) {
+ boolean flag = false;
+ Properties props = System.getProperties();
+ try {
+ if (props.getProperty("os.name").toLowerCase().contains("windows")) {
+ Process p = Runtime.getRuntime().exec("cmd /c tasklist ");
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ InputStream os = p.getInputStream();
+ byte b[] = new byte[256];
+ while (os.read(b) > 0) {
+ baos.write(b);
+ }
+ String s = baos.toString();
+ if (s.indexOf(processName) >= 0) {
+ Runtime.getRuntime().exec("taskkill /im " + processName + " /f");
+ flag = true;
+ } else {
+ flag = false;
+ }
+ }else {
+ Process p = Runtime.getRuntime().exec(new String[]{"sh","-c","ps -ef | grep "+processName});
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ InputStream os = p.getInputStream();
+ byte b[] = new byte[256];
+ while (os.read(b) > 0) {
+ baos.write(b);
+ }
+ String s = baos.toString();
+ if (s.indexOf(processName) >= 0) {
+ String[] cmd ={"sh","-c","killall -9 "+processName};
+ Runtime.getRuntime().exec(cmd);
+ flag = true;
+ } else {
+ flag = false;
+ }
+ }
+ } catch (IOException e) {
+ logger.error("检测office进程异常", e);
+ }
+ return flag;
+ }
+
@PreDestroy
public void destroyOfficeManager(){
if (null != officeManager && officeManager.isRunning()) {
diff --git a/jodconverter-web/src/main/resources/web/fileNotSupported.ftl b/jodconverter-web/src/main/resources/web/fileNotSupported.ftl
index a11323b6..e238be7c 100644
--- a/jodconverter-web/src/main/resources/web/fileNotSupported.ftl
+++ b/jodconverter-web/src/main/resources/web/fileNotSupported.ftl
@@ -32,7 +32,7 @@
该文件类型(${fileType})系统暂时不支持在线预览,说明:
- ${msg}
+ ${msg}
如有需要请联系@HappyPig