使用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]);
}
}
}
}
}
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]);
}
}
}
}
}
相关文章推荐
- 使用Jacob合并多个word文档生成一个word文档
- 演示使用 JACOB : Java COM Bridge 操纵 Word 文档
- Java操作word文档使用JACOB和POI操作word,Excel,PPT需要的jar包
- 如何把服务器上的多个Word文档合并到一个Word文档中并且动态填充指定的内容
- 使用Jacob批量转换word为txt、pdf、xps、html、xml等文档
- Java 使用 jacob 将 word 文档转换为 pdf 文件
- Java 使用jacob打印word文档
- 使用ASPOSE.WORD组件,在word文档指定的位置动态生成表格,支持单元格合并及背景填充
- Js使用word书签填充内容
- 使用Jacob来处理Word文档
- 使用java代码采用jacob的方式吧word文档转化为pdf格式
- Js使用word书签填充内容
- 使用Jacob来处理Word文档
- 【jacob word】使用jacob,合并多个word为一个word文件
- 如何把服务器上的多个Word文档合并到一个Word文档中并且动态填充指定的内容
- 使用JasperReports合并多个报表的word文档问题解决方法
- JACOB调用WORD书签修改WORD文档,并生成html显示到页面中
- 合并word文档时,用Jacob 插入分节符以达到保持原来的页眉的一个可行方案
- 使用jacob合并多个word为单个word
- 使用Word的Mail Merge(邮件合并)功能实现批文档\邮件\通知的生成