JACOB是在windows平台上为了解决像这样的不同应用软件,通信缺乏通用api问题,而推出com的解决方案。
最近一个项目中用到了word在线编辑功能,后台为编辑后的每个条目都生成了word,并且有一个需求导出所有条目合并后的word的文档,并且其中还用到了宏,使用POI和docx4j都比较困难,所以尝试用jacob的文档合并解决,(但是JACOB严重依赖Windows操作系统,也是他的局限性,也就是服务器必须是Windows系统)
以下是合并和根据条目word中的内容统一重新生成序号代码。
/**
* 添加自动添加默认标题编号
*/
public void applyListTemplate() {
//必须选中当前段落,否则添加不上
Dispatch paragraphs = Dispatch.get(this.document, "Paragraphs").toDispatch();
int paraCount = Dispatch.get(paragraphs, "Count").getInt();
for (int i = 1; i <= paraCount; i++) {
Dispatch paragraph = Dispatch.call(paragraphs, "Item", new Variant(i)).toDispatch();
int outline = Dispatch.get(paragraph, "OutlineLevel").getInt();
if (outline <= 4) {//标题1-4加序号
Dispatch paraRange = Dispatch.get(paragraph, "Range").toDispatch();
//设置默认序号
Dispatch listFormat = Dispatch.get(paraRange, "ListFormat").toDispatch();
Dispatch.call(listFormat, "ApplyOutlineNumberDefault");
}
}
}
/**
* 在插入点最后追加其他文件内容
*
* @param path
*/
public void insertFile(String path) {
Dispatch.invoke(selection, "insertFile", Dispatch.Method, new Object[]{
path, "", new Variant(false), new Variant(false),
new Variant(false)}, new int[3]);
}