1.准备工作
需要一个dll文件和一个jar文件,如图:
把dll文件拷贝到C:/Windows/System32下;jar包引入到框架中
2.相关代码:
1)格式转换类:
@Controller
@SessionAttributes("userSession")
public class WordToHtmlController {
private Logger logger = Logger.getLogger(WordToHtmlController.class);
int WORD_HTML = 8;
int WORD_TXT = 7;
int EXCEL_HTML = 44;
/**
- WORD转HTML
* - @param docfile WORD文件全路径
- @param htmlfile 转换后HTML存放路径
*/
public void wordToHtml(String docfile, String htmlfile) {
//启动word,生成一个ActivexComponent对象
ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
try {
//设置word不可见
app.setProperty("Visible", new Variant(false));
Dispatch docs = app.getProperty("Documents").toDispatch();
//打开word文件
Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]
, new int1).toDispatch();
Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]
, new int1);
Variant f = new Variant(false);
Dispatch.call(doc, "Close", f);
} catch (Exception e)
finally {
app.invoke("Quit", new Variant[]{});
}
}
@RequestMapping("/filecurvefrom.do")
public void testcurve()
}
2)调用方法:
wordtohtml.wordToHtml(uploadFile + predictmanager.getAttchment(), uploadFile + pytsx + ".htm");//把转换后的文档放到指定目录下
3.常见问题:
使用该插件转换文档时,经常会遇到如下问题:
Native Library C:/WINNT/system32/jacob.dll already loaded in another classloader
java.lang.UnsatisfiedLinkError: Native Library C:/WINNT/system32/jacob.dll already loaded in another classloader
问题原因:
Java API 表明:JVM只允许一个默认的ClassLoader来load native library,同时并不提供专门的API来unload一个 loaded native library,因此无法在我们的重启Web应用的代码中来手工清除已经load的jacob。为此我们必须保证在重启 Web应用时不再重复加载jacob,具体方法是:将jacob.jar包放到Web Server的公共lib文件夹中(如:.../jboss-4.2.3/lib/),而不是Web应用的lib中(如:.../WEB-INF/lib/)(注:在build文件中用exclude把jacob.jar包去除即可)。