项目开发过程中,需求涉及到了各种文档转换为HTML或者网页易显示格式,现在将实现方式整理如下:
一、了解Jacob
先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个开始于1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。
下载地址:sourceforge/project/showfiles.php?group_id=109543&package_id=118368
二、Jacob安装
1、我们解开下载的jacob_1.9.zip,在文件夹中到jacob.dll和jacob.jar两个文件
2、将压缩包解压后,Jacob.jar添加到Libraries中;
3、将Jacob.dll放至“WINDOWS\SYSTEM32”下面。
需要注意的是:
【使用IDE启动Web服务器时,系统读取不到Jacob.dll,例如用MyEclipse启动Tomcat,就需
要将dll文件copy到(经本人实践,发现此处应为JDK,不然会有问题哦)安装目录的“jre\bin”下面。最后需要关闭MyEclipse,再重启。
一般系统没有加载到Jacob.dll文件时,报错信息为:“java.lang.UnsatisfiedLinkError: no jacob in java.library.path”】
三、使用Jacob转换Word,Excel为HTML
JAVA代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.Dispatch;
import com.jacob.Variant;
public class TransformFiletoHtml
{
    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)
    {
        ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
        try
        {
getsavefilename
            app.setProperty("Visible", new Variant(false));
            Dispatch docs = Property("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[] {});
        }
    }
   
    /**
    * EXCEL转HTML
    * @param xlsfile EXCEL文件全路径
    * @param htmlfile 转换后HTML存放路径
    */
    public void excelToHtml(String xlsfile, String htmlfile)
    {
        ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel
        try
        {
            app.setProperty("Visible", new Variant(false));
            Dispatch excels = Property("Workbooks").toDispatch();
            Dispatch excel = Dispatch.invoke(excels,"Open",Dispatch.Method,new Object[] { xlsfile, new Variant(false),new Variant(true) }, new int[1]).toDispatch();
            Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {htmlfile, new Va
riant(EXCEL_HTML) }, new int[1]);
            Variant f = new Variant(false);
            Dispatch.call(excel, "Close", f);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            app.invoke("Quit", new Variant[] {});
        }
    }
   
    /**
    * /删除指定文件夹
    * @param folderPath 文件夹全路径
    * @param htmlfile 转换后HTML存放路径
    */
    public void delFolder(String folderPath)
                {
        try
        {
            delAllFile(folderPath); //删除完里面所有内容
            String filePath = folderPath;
            filePath = String();
            java.io.File myFilePath = new java.io.File(filePath);
            myFilePath.delete(); //删除空文件夹
        } catch (Exception e) {e.printStackTrace();}
    }
   
    /**
    * /删除指定文件夹下所有文件
    * @param path 文件全路径
    */
    public boolean delAllFile(String path)
      {
          boolean flag = false;
          File file = new File(path);
          if (!ists())
          {
            return flag;
          }
          if (!file.isDirectory())
          {
            return flag;
          }
          String[] tempList = file.list();
          File temp = null;
          for (int i = 0; i < tempList.length; i++)
          {
              if (dsWith(File.separator))
              {
                temp = new File(path + tempList[i]);
              }
              else
              {
                  temp = new File(path + File.separator + tempList[i]);
              }
              if (temp.isFile())
              {
                temp.delete();
              }
              if (temp.isDirectory())
              {
                delAllFile(path + "/" + tempList[i]);//先删除文件夹里面的文件
                delFolder(path + "/" + tempList[i]);//再删除空文件夹
                flag = true;
              }
          }
          return flag;
            }
}
调用JAVA代码:
public class Test1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TransformFiletoHtml trans = new TransformFiletoHtml();
        trans.wordToHtml("D:\\sinye.doc", "D:\\sinye.html");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。