有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗?
你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。
后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。
我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览?
有很多方式,比如转为flash等等,但都太复杂了。
我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob
详见如下DEMO:
1、导入jacob.jar
2、核心测试代码
- import com.jacob.activeX.ActiveXComponent;
- import com.jacob.com.Dispatch;
- import com.jacob.com.Variant;
- /**
- *
- *
- * @author jialin
- * @since 2015-3-27
- */
- public class word2html {
- public static boolean wordToHtml(String inPath, String toPath) {
- // 启动word
- ActiveXComponent axc = new ActiveXComponent("Word.Application");
- boolean flag = false;
- try {
- // 设置word不可见
- axc.setProperty("Visible", new Variant(false));
- Dispatch docs = axc.getProperty("Documents").toDispatch();
- // 打开word文档
- Dispatch doc = Dispatch.invoke(
- docs,
- "Open",
- Dispatch.Method,
- new Object[] { inPath, new Variant(false),
- new Variant(true) }, new int[1]).toDispatch();
- // 作为html格式保存到临时文件
- Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
- toPath, new Variant(8) }, new int[1]);
- Variant f = new Variant(false);
- Dispatch.call(doc, "Close", f);
- flag = true;
- return flag;
- } catch (Exception e) {
- e.printStackTrace();
- return flag;
- } finally {
- axc.invoke("Quit", new Variant[] {});
- }
- }
- public static void main(String[] args) {
- word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",
- "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");
- }
- }
忽然想起当年老师说的一句话:遇到问题,你就去搜吧,肯定前面已经有很多人遇到和你一样的问题了。看看别人是怎么干的,借鉴一下,站在巨人的肩膀上。
有了需求,自然有解决需求的工具。