|
|
|
@ -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()) { |
|
|
|
|