通过jacob实现word转为HTML

jopen 12年前
     <p style="text-indent:10.5pt;margin:0cm 0cm 0pt;" class="MsoNormal"><span style="font-size:small;"><span>这几天研究</span><span lang="EN-US"><span style="font-family:Calibri;">jacob</span></span><span>原本的需求是将</span><span lang="EN-US"><span style="font-family:Calibri;">word</span></span><span>显示到</span><span lang="EN-US"><span style="font-family:Calibri;">FCK</span></span><span>中,于是就想到用</span><span lang="EN-US"><span style="font-family:Calibri;">jacob</span></span><span>去做。<span style="letter-spacing:0.4pt;">它允许在</span></span><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">java</span></span><span>中调用</span><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">com</span></span><span>接口自动组件,它使用</span><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">JNI</span></span><span>(本地调用程序)来进行本地调用</span><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">COM</span></span><span>库。它可运行在</span><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">x86</span></span><span>和支持</span><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">32</span></span><span>位和</span><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">64</span></span><span>位</span><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">Java</span></span></span><span style="font-size:small;"><span style="letter-spacing:0.4pt;" lang="EN-US"><span lang="EN-US">虚拟机</span><span style="font-family:Calibri;"> </span></span></span><span style="font-size:small;"><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;">X64</span></span><span>的环境。</span></span></p>    <p style="margin:0cm 0cm 0pt;" class="MsoNormal"><span style="letter-spacing:0.4pt;" lang="EN-US"><span style="font-family:Calibri;font-size:small;"> </span></span></p>    <p style="text-indent:5.25pt;margin:0cm 0cm 0pt;" class="MsoNormal"><span style="font-size:small;"><span>首先下载</span><span lang="EN-US"><span style="font-family:Calibri;">Jacob</span></span><span>包,</span><span lang="EN-US"><span style="font-family:Calibri;">JDK1.5</span></span><span>以上需要使用</span><span lang="EN-US"><span style="font-family:Calibri;">Jacob1.9</span></span><span>版本(</span><span lang="EN-US"><span style="font-family:Calibri;">JDK1.6</span></span><span>尚未测试)</span></span></p>    <p style="margin:0cm 0cm 0pt 21pt;" class="MsoNormal"><span style="font-size:small;"><span lang="EN-US"><span style="font-family:Calibri;">1</span></span><span>、将压缩包解压后,</span><span lang="EN-US"><span style="font-family:Calibri;">Jacob.jar</span></span><span>添加到</span><span lang="EN-US"><span style="font-family:Calibri;">Libraries</span></span><span>中;</span></span></p>    <p style="margin:0cm 0cm 0pt 21pt;" class="MsoNormal"><span style="font-size:small;"><span lang="EN-US"><span style="font-family:Calibri;">2</span></span><span>、将</span><span lang="EN-US"><span style="font-family:Calibri;">Jacob.dll</span></span><span>放至“</span><span lang="EN-US"><span style="font-family:Calibri;">WINDOWS\SYSTEM32</span></span><span>”下面。</span></span></p>    <p style="margin:0cm 0cm 0pt;" class="MsoNormal"><span lang="EN-US"><span style="font-family:Calibri;font-size:small;"> </span></span></p>    <p style="margin:0cm 0cm 0pt;" class="MsoNormal"><span style="font-size:small;"><span>需要注意的是:</span><span lang="EN-US"><span style="font-family:Calibri;"> </span></span></span></p>    <p style="margin:0cm 0cm 0pt;" class="MsoNormal"><span style="font-size:small;"><span>【使用</span><span lang="EN-US"><span style="font-family:Calibri;">IDE</span></span><span>启动</span><span lang="EN-US"><span style="font-family:Calibri;">Web</span></span><span>服务器时,系统读取不到</span><span lang="EN-US"><span style="font-family:Calibri;">Jacob.dll</span></span><span>,例如用</span><span lang="EN-US"><span style="font-family:Calibri;">MyEclipse</span></span><span>启动</span><span lang="EN-US"><span style="font-family:Calibri;">Tomcat</span></span><span>,就需要将</span><span lang="EN-US"><span style="font-family:Calibri;">dll</span></span><span>文件</span><span lang="EN-US"><span style="font-family:Calibri;">copy</span></span><span>到</span><span lang="EN-US"><span style="font-family:Calibri;">MyEclipse</span></span><span>安装目录的“</span><span lang="EN-US"><span style="font-family:Calibri;">jre\bin</span></span><span>”下面。</span><span lang="EN-US"><span style="font-family:Calibri;"> </span></span></span></p>    <p style="margin:0cm 0cm 0pt;" class="MsoNormal"><span style="font-size:small;"><span>一般系统没有加载到</span><span lang="EN-US"><span style="font-family:Calibri;">Jacob.dll</span></span><span>文件时,报错信息为:“</span><span style="color:red;"><span style="font-family:Calibri;">java.lang.UnsatisfiedLinkError: no jacob in java.library.path</span></span><span>”】</span></span></p>    <p style="margin:0cm 0cm 0pt;" class="MsoNormal"><span lang="EN-US"><span style="font-family:Calibri;font-size:small;"> </span></span></p>    <p style="margin:0cm 0cm 0pt;" class="MsoNormal"><span style="font-size:small;"><span>下面是代码:</span></span></p>    <pre class="brush:java; toolbar: true; auto-links: false;">package com.gra.util;   import com.jacob.activeX.ActiveXComponent; import com.jacob.com.Dispatch; import com.jacob.com.Variant;   public class JacobUtil {           public static final int WORD_HTML = 8;           public static final int WORD_TXT = 7;           public static final int EXCEL_HTML = 44;              /**            * WORD转HTML            *             * @param docfile            *            WORD文件全路径            * @param htmlfile            *            转换后HTML存放路径            */           public void wordToHtml(String docfile, String htmlfile) {                     ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word                     try {                              // 设置word不可见                              app.setProperty("Visible", new Variant(false));                              //获得documents对象                              Dispatch docs = (Dispatch) app.getProperty("Documents")                                                 .toDispatch();                              //打开文件                              Dispatch doc = Dispatch.invoke(                                                 docs,                                                 "Open",                                                 Dispatch.Method,                                                 new Object[] { docfile, new Variant(false),                                                                   new Variant(true) }, new int[1]).toDispatch();                              //保存新的文件                              Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {                                                 htmlfile, new Variant(WORD_HTML) }, new int[1]);                              Variant f = new Variant(false);                              Dispatch.call(doc, "Close", f);                     } catch (Exception e) {                              e.printStackTrace();                     } finally {                              app.invoke("Quit", new Variant[] {});                     }           } }</pre>    <p></p> 测试代码:    <pre class="brush:java; toolbar: true; auto-links: false;">public class JunitTest {      @Test      public void test2() {         JacobUtil ju = new JacobUtil();         String docfile = "D:\\2012.doc";         String htmlfile = "D:\\2012.html";         ju.wordToHtml(docfile, htmlfile);      }  }</pre>