可以参考:http://sinye.iteye.com/blog/588050
在Java项目开发过程中,需求涉及到了各种文档转换为HTML,现在将实现方式整理如下:
一、了解Jacob
先了解一下概念,JACOB 就是 JAVA-COM Bridge的缩写,提供自动化的访问com的功能,也是通过JNI功能访问windows平台下的com组件或者win32系统库的。这是一个开始于1999年的开源项目的成果,有很多使用者对该项目进行了修改,做出了自己的贡献。
下载地址:http://sourceforge.net/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到MyEclipse安装目录的“jre\bin”下面。
一般系统没有加载到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.com.Dispatch;
- import com.jacob.com.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
- {
- app.setProperty("Visible", new Variant(false));
- Dispatch docs = 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[] {});
- }
- }
- /**
- * 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 = app.getProperty("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 Variant(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 = filePath.toString();
- 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 (!file.exists())
- {
- return flag;
- }
- if (!file.isDirectory())
- {
- return flag;
- }
- String[] tempList = file.list();
- File temp = null;
- for (int i = 0; i < tempList.length; i++)
- {
- if (path.endsWith(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("C:\\123.doc", "C:\\123.html");
- //trans.wordToHtml("C:\\123.docx", "C:\\123.html");根据word的真实后缀进行路径选择;
- }
- }
解决方法:将jacob-1.15-M4-x86.dll放入D:\Program Files\Java\jdk1.6.0_06\bin即可。建议如果不清楚java.library.path,输入代码如下
System.out.println(System.getProperty("java.library.path")),确定jdk的bin路径正确和查询Java版本信息,打开cmd-->java -version。