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