文档章节

Jacob如何使用

ayesd
 ayesd
发布于 2014/04/01 21:13
字数 871
阅读 4298
收藏 7

现状:项目使用Jacob组件对word加水印,xdocreport进行数据的加载和pdf的转换。

问题:目前由于word数量越来越大,而大部分word都有几页纸是相同的,所以每次修改都需要遍历大部分的word,这种设计显然不利于项目的维护。

解决思路:考虑将相同的几页纸抽取出来,在转PDF的时候,将这些内容插入到指定的位置即可,以后要修改这几页纸的内容,则只需要修改一次即可。

技术难点:如何将相同的几页纸插入到指定的位置?

采用技术:在网上搜索后得知,最灵活的莫过于Jacob,而且项目已经使用此技术进行添加水印,因此,决定采用此技术。

Jacob关于Jacob的使用,网上到处都有,比如下面几个网址:

http://danadler.com/jacob/ 当然少不了官方网址

http://wv1124.iteye.com/blog/582921 该网址中的介绍和示例,基本已经满足大部分需求

http://wv19831124.blog.163.com/blog/static/59950007200811585819650/ 此文章同上面的大致一样,但是在文章后面提到了我后面要讲的VBA

http://www.360doc.com/content/11/0130/19/3947093_90007570.shtml 大神之作,在这个文章里面,我终于突破了困扰的问题

以上就是比较典型的Jacob的介绍和操作示例等,里面比较重要的就是VBA了,这个东西我最初苦苦寻找,但是未果,后来在我说的“大神之作”的末尾终于找到答案了。读过上面的几篇文章,基本就会知道有VBA这个东西,而且Jacob都是通过VBA在操作word,所以解决了VBA,基本Jacob就得心应手了,而如果对VBA不太了解的话,是很难寻找到线索去突破VBA的,在大神之作的末尾,提到了“录制宏”,对,就是录制宏,根据网上的资料,打开Word的开发者工具,点击“Visual Basic”,然后按下F1,即可得到Jacob操作的东西。帮助里面所有的对象在jacob中都是Dispatch,Documents是,Document也是,Content也是……而对于每个对象都会有属性和方法,OK,调用属性,使用Dispatch.get,调用方法使用Dispatch.call,懂了吧,这就是那些示例代码里面写的。

比如下图就是我截取的Document对象:

比如想关闭文档,则调用Dispatch.call(doc2, "Close", new Variant(true));

其中的"Close"就是上图中的最后一行的方法名称,而最后没的参数,则可以点击该方法进去,即可知道。

至此,jacob即可被掌握,至于我上述遇到的问题,解决方法如下:

public void copyOrgInfo2TargetWord(String orgPath, String targetPath) {
		ActiveXComponent wrdCom = getInstance();
		Dispatch documents = wrdCom.getProperty("Documents").toDispatch(); // documents表示word的所有文档窗口,(word是多文档应用程序)
		Dispatch doc = Dispatch.call(documents, "Open", orgPath).toDispatch();
		Dispatch content = Dispatch.get(doc, "Content").toDispatch();
		Dispatch.call(content, "Copy");
		Dispatch doc2 = Dispatch.call(documents, "Open", targetPath).toDispatch();
		Dispatch threepage = Dispatch.call(doc2, "GoTo", new Object[] { new Variant(1), new Variant(1), new Variant(3) }).toDispatch();
		Dispatch.call(threepage, "Paste");
		Dispatch.call(doc2, "Close", new Variant(true));
	}

orgPath为相同的那几页纸,targetPath为目标word,"GoTo", new Object[] { new Variant(1), new Variant(1), new Variant(3) }为定位到第3页。

© 著作权归作者所有

ayesd
粉丝 7
博文 19
码字总数 30025
作品 0
深圳
高级程序员
私信 提问
java如何调用ppt宏

java如何调用ppt宏 ppt是2007的 jacob可以调用么 可以给个demo么 jacob官网上有demo么 jacob官网是什么

吉他手心里的花开不败
2015/09/24
338
0
Jacob 操作 EXCEL的单元格如何合并

Jacob 操作 EXCEL的单元格如何合并? 网上找到jacob操作word表格的,改成excel的实现不了。

沙漠飞鹰
2018/08/24
174
1
Perl脚本学习笔记(四)

29. 一旦我们将模块载入,无论是否引入特定的函数,我们均可以使用全名进行引用。 如: use File:Basename qw/ /; #没有引入函数 my $dirname = File::Basename::dirname $name; #使用模块中...

像教授
2017/11/26
0
0
安装本地jar到Maven仓库

1、配置好Maven路径,在命令行下能够使用mvn命令 例如: 显示maven版本 2、安装本地jar文件 使用maven的install功能,命令如下: 命令执行结束后,将安装jacob.jar文件到.....repositoriesco...

Houor
2018/03/03
33
0
jacob使用问题

我的系统是Windows7 64位和JAVA8 64位。 我用JAVA程序通过Jacob来操作Windows的COM对象,其中Jacob使用的是jacob-1.17版本,按要求对jacob-1.17-M2-x64.dll和Jacob.jar正确配置后,发现如果通...

wlrjgzs
2017/09/01
141
1

没有更多内容

加载失败,请刷新页面

加载更多

Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
28分钟前
2
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
47分钟前
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
6
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0
jenkins 插件下载加速最终方案

推荐做法 1、告诉jenkins 我哪些插件需要更新 jenkins插件清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 1.进入jenkins系统管理 2.进入插件管...

vasks
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部