问题描述
利用jacob将PPT转为PDF,Windows server 上总是过一段时间会卡死
问题出现的环境背景及自己尝试过哪些方法
目前仅仅是自己手写一个demo无限跑,看看能不能复现问题
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
try {
/*int ppt2Pdf = PPT2PDFUtil.ppt2Pdf(filePath, tempPath+pdfName+".pdf");*/
PPT2PDFUtil tempPPT2PDFUtil = new PPT2PDFUtil(filePath,
tempPath+pdfName+".pdf");
/*int ppt2Pdf = PPT2PDFUtil.ppt2Pdf(extractFile.getAbsolutePath()+NMSCUtil.SEPARATOR+pptName,
extractFile.getAbsolutePath()+NMSCUtil.SEPARATOR+pdfName+".pdf");*/
Future<Boolean> submitPPT2PDFUtil = exec.submit(tempPPT2PDFUtil);
Boolean rstPPT2PDFUtil = false;
try {
rstPPT2PDFUtil = submitPPT2PDFUtil.get(10, TimeUnit.MINUTES);
} catch (TimeoutException ex) {
// 关闭线程池
exec.shutdown();
ex.printStackTrace();
logger.info("ppt转pdf失败");
//被注释
String result = modifyStatus(id);
logger.info("ppt转pdf失败["+result+"]");
// 手动kill调PPT进程
Runtime.getRuntime().exec("Taskkill /IM POWERPNT.EXE /F");
return Action.CommitMessage;
} catch (Exception e) {
e.printStackTrace();
}
if(!NMSCUtil.judageFileExist(tempPath+pdfName+".pdf")){
//被注释
String result = modifyStatus(id);
logger.info("ppt转pdf失败["+result+"]");
return Action.CommitMessage;
}
// PPT转PDF的部分代码如下
public int ppt2Pdf() throws IOException{
File file = new File(srcFilePath);
if (file.exists()) {
ComThread.InitMTA(true);
ActiveXComponent ppt = null;
try {
ppt = new ActiveXComponent("Powerpoint.Application");
//ppt.setProperty("Visible", new Variant(false));
ppt.setProperty("DisplayAlerts", DISPLAY_ALERTS);
Dispatch presentations = ppt.getProperty("Presentations")
.toDispatch();
String absSrcFilePath = file.getAbsolutePath();
logger.info("open document with MS Powerpoint "
+ absSrcFilePath);
Dispatch presentation = Dispatch.call(presentations, "Open",
absSrcFilePath,
true,true,false).toDispatch();
File toFile = new File(destFilePath);
String absDestFilePath = toFile.getAbsolutePath();
logger.info("convert pdf document to " + absDestFilePath);
if (toFile.isDirectory()) {
logger.error("destination path must be a file path.");
return TRANSFER_FAILURE;
}
Dispatch.call(presentation, "SaveAs", absDestFilePath,new Variant(32));
Dispatch.call(presentation, "Close");
logger.info("convert ppt to pdf complete.");
return TRANSFER_SUCCEED;
} catch (Exception e) {
logger.error("call MS Powerpoint fail.", e);
return TRANSFER_FAILURE;
} finally {
if (ppt != null) {
logger.info("exit Powerpoint.");
ppt.invoke("Quit");
}
ComThread.Release();
}
}
logger.error("document does not exist.");
return TRANSFER_FAILURE;
}
你期待的结果是什么?实际看到的错误信息又是什么?
是否是因为kill的时候没有destory相关子进程引起的?为什么会导致卡死呢?实际错误信息看不到