您的位置:首页 > 其它

使用Jacob合并Word文档并填充文档中的书签

2012-06-19 17:43 267 查看
Jacob(Java
COM Bridge)是一个开始于1999年的开源项目,它支持在Java环境中调用Windows平台下的COM组件,接下来我们要使用的dll文件就是COM组件。

运行以下代码需下载jar包及dll文件 (http://sourceforge.net/projects/jacob-project/)

PS:首先电脑要安装Office软件中的Word程序,容易忽视的是我们自己的电脑安装了但服务器没装。另外要根据机器类型选择相应的jacob.dll文件(x86,x64),并将dll文件放在JDK安装目录下的\jre1.6.0_5\bin目录中,其实放在系统system32目录或tomcat的bin目录下也可以,只要在java.library.path中就成。

import java.io.File;

import com.jacob.activeX.ActiveXComponent;

import com.jacob.com.ComThread;

import com.jacob.com.Dispatch;

import com.jacob.com.Variant;

public class JacobWord
{

private ActiveXComponent app;

private Dispatch document;

private Dispatch selection;

private Dispatch paragraph;

private Dispatch font;

// 初始化并新建Word文档

public JacobWord()
{

ComThread.InitSTA();// 初始化Com线程

app = new ActiveXComponent("Word.Application");// 初始化word应用程序

app.setProperty("Visible", new Variant(false));// 设置word文档不在前台打开

app.setProperty("AutomationSecurity", new Variant(3)); // 禁用宏

Dispatch docs = app.getProperty("Documents").toDispatch();// 获取文挡属性

document =
Dispatch.call(docs, "Add").toDispatch(); // 创建新文档

selection = app.getProperty("Selection").toDispatch();// 获得选定内容

paragraph =
Dispatch.get(selection, "ParagraphFormat").getDispatch();// 段落

font =
Dispatch.get(selection, "Font").toDispatch();// 字体

}

public static void main(String[]
args) {

File filePath = new File("c:\\test");

if (filePath.exists())
{

new JacobWord().mergeWord(filePath.listFiles());

}

}

// 合并Word文档

private void mergeWord(File[]
file) {

try {

setWordTitle();

// 设置文本样式,不包括接下来要插入的WORD文档内容

Dispatch.put(paragraph, "Alignment", "3");//
1:中 2:右 3:左

Dispatch.put(font, "Color", "1,0,0,0"); // 红色

Dispatch.put(font, "Size",
12);

for (int i
= 0; i < file.length;
i++) {

String
tempFile = file[i].getAbsolutePath();

if (tempFile.endsWith(".doc")
|| tempFile.endsWith(".docx"))
{

Dispatch.put(selection, "Text",
file[i].getName() + "文档内容如下:");

Dispatch.call(selection, "MoveDown");

Dispatch.call(selection, "TypeParagraph"); // 空一行段落

Dispatch.call(selection, "insertFile",
tempFile);// 插入文件内容

Dispatch.call(selection, "TypeParagraph"); // 空一行段落

}

}

fillBookmarks(new String[]
{ "author" }, new String[]
{ "victor" });

Dispatch.call(document, "SaveAs", new Variant("c:\\test\\test.doc")); //保存

Dispatch.call(document, "Close", new Variant(false));// 关闭文档

} catch (Exception
ex) {

ex.printStackTrace();

} finally {

app.invoke("Quit", new Variant(0));// 退出word应用

ComThread.Release();// 释放Com线程

}

}

// 设置合并后文档的标题及样式

private void setWordTitle()
{

Dispatch.put(paragraph, "Alignment",
1);// 1:中 2:右 3:左

Dispatch.put(font, "Bold", new Variant(true));

Dispatch.put(font, "Color", "0,0,0,0"); // 黑色

Dispatch.put(font, "Size",
16);

Dispatch.call(selection, "TypeText", "合并后的Word文档"); // 写入标题内容

Dispatch.call(selection, "TypeParagraph"); // 空一行段落

}

// 填充书签

private void fillBookmarks(String[]
bookmarks, String[] fillValues) {

Dispatch bookMarks = Dispatch.call(document, "Bookmarks").toDispatch();

if (bookmarks.length ==
fillValues.length)
{

for (int i
= 0; i < bookmarks.length;
i++) {

Variant
isExist = Dispatch.call(bookMarks, "Exists",
bookmarks[i]);

if (isExist.getBoolean())
{

Dispatch
item = Dispatch.call(bookMarks, "Item",
bookmarks[i]).toDispatch();

Dispatch
range = Dispatch.call(item, "Range").toDispatch();

Dispatch.put(range, "Text",
fillValues[i]);

}

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: