关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、3102411850 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 10385|回复: 1

Jacob使用小结

[复制链接]
发表于 2013-7-9 11:03:00 | 显示全部楼层 |阅读模式
Jacob 是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁。使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用。Jacob下载的地址为:

http://sourceforge.net/project/s ... p;package_id=118368

配置:

(1)将解压包中的jacob.dll(x86常用,x64)拷到jdk安装目录下的jre\bin文件夹或windows安装路径下的WINDOWS\system32文件夹下

(2)将jacob.jar文件拷到classpath下即可

实例1:

public class wordtohtml
{
// -------------------------------------------------
// 方法原型: change(String paths)
// 功能描述: 将指定目录下面所有的doc文件转化为HTML并存储在相同目录下
// 输入参数: String
// 输出参数: 无
// 返 回 值: 无
// 其它说明: 递归
// --------------------------------------------
public static void change(String paths, String savepaths)
{
File d = new File(paths);
// 取得当前文件夹下所有文件和目录的列表
File lists[] = d.listFiles();
String pathss = new String("");
// 对当前目录下面所有文件进行检索
for (int i = 0; i < lists.length; i++)
{
if (lists.isFile())
{
String filename = lists.getName();
String filetype = new String("");
// 取得文件类型
filetype = filename.substring((filename.length() - 3), filename.length());
// 判断是否为doc文件
if (filetype.equals("doc"))
{
// 打印当前目录路径
System.out.println(paths);
// 打印doc文件名
System.out.println(filename.substring(0, (filename.length() - 4)));
ActiveXComponent app = new ActiveXComponent("Word.Application");
// 启动word
String docpath = paths + filename;
String htmlpath = savepaths
+ filename.substring(0, (filename.length() - 4));
String inFile = docpath;
// 要转换的word文件
String tpFile = htmlpath;
// HTML文件
boolean flag = false;
try
{
app.setProperty("Visible", new Variant(false));
// 设置word不可见
Object docs = app.getProperty("Documents").toDispatch();
// Object doc = Dispatch.invoke(docs,"Open",
// Dispatch.Method, new Object[]{inFile,new
// Variant(false), new Variant(true)}, new
// int[1]).toDispatch();
Object doc = Dispatch.invoke((Dispatch) docs, "Open", Dispatch.Method,
new Object[] { inFile }, new int[1]).toDispatch();
// 打开word文件
Dispatch.invoke((Dispatch) doc, "SaveAs", Dispatch.Method,
new Object[] { tpFile, new Variant(8) }, new int[1]);
// 作为html格式保存到临时文件
Variant f = new Variant(false);
Dispatch.invoke((Dispatch) doc, "Close", Dispatch.Method,
new Object[] { new Variant(false) }, new int[1]);
flag = true;
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
app.invoke("Quit", new Variant[] {});
}
System.out.println("转化完毕!");
}
}
else
{
pathss = paths;
// 进入下一级目录
pathss = pathss + lists.getName() + "\\";
// 递归遍历所有目录
change(pathss, savepaths);
}
}
}

// ---------------------------------------------------------
// 方法原型: main(String[] args)
// 功能描述: main文件
// 输入参数: 无
// 输出参数: 无
// 返 回 值: 无
// 其它说明: 无
// ----------------------------------------------------------
public static void main(String[] args)
{
String paths = new String("c:\\wordtohtml\\");
String savepaths = new String("c:\\wordtohtml\\");
change(paths, savepaths);
}
}

实例2

问题1:由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正
解决方法:重新下载Jacob的jar及dll文件(最好版本比现在的低,如1.11)解决

问题2:com.jacob.com.ComFailException: Can't get object clsid from progid
解决方法:代码中存在空格,删掉就可以了
没装Office



发表于 2013-7-13 11:05:31 | 显示全部楼层
顶起
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表