jacob使用入门及问题解析

转自:http://blog.csdn.net/hemingwang0902/article/details/4377994

本博客 jacob 列文章导读
Java操作Microsoft Word之jacob
jacob使用入门及问题解析
使用Jacob将Word转为Html或txt
使用Jacob将Word转为PDF
java通过jacob调用word (根据Word模板生成动态内容)

首先,大家先要了解一下jacob ,官方的解释是Java COM Bridge,即java和com组件间的桥梁(进一步了解com/dcom: http://docs.huihoo.com/com/

com一般表现为dll或exe等二进制文件,像我们呆会会用到的jacob.dll文件,这里说说为什么我们用java去操纵office(如:word)要使用com,而不直接使用java去做?
    首先,我们清楚office是建立在windows平台之上的,本身是一个软件,除了他自己提供的宏似乎没有什么能对他进行直接的操作;在windows平台上为了解决像这样的不同应用软件,通信缺乏通用api问题,推出了com的解决方案;
    其次,我们使用dll中的一组或多组相关的函数存取组件数据,总的合称为接口具体到每个细节的实现称为方法;如果我们要调用接口里的方法,唯一的途径就是调用指向接口的指针;
   所以总的来说使用就是dll完成api的转换;
不懂没关系,会用就好,用久自然懂了, 好了com讲完,我们开始我们的主要内容吧!

大家先到这里下载jacob.jar 
里面的jacob.jar是我们要用的包
            jacob.dll就是我前面说的com组件
把包里的jacob.dll放到c:/windows/system32下
讲解麻烦,画个图大家看 好

值得注意的是,不同的版本的系统使用不同的dll文件
所以如果你编译成功,但运行失败一般是dll文件问题
遇到这种情况,可以到
http://downloads.sourceforge.net/jacob-project/jacob_1.9.zip?modtime=1109437002&big_mirror=0
下载其他的版本的 dll 文件。
先给大家个word的测试代码(经过更改该代码在我的机器上运行正常)

[java] view plaincopy

  1. import com.jacob.activeX.ActiveXComponent;
  2. import com.jacob.com.ComException;
  3. import com.jacob.com.Dispatch;
  4. import com.jacob.com.Variant;
  5. public class WordDocumentProperties {
  6. /** 声明一个word对象*/
  7. private ActiveXComponent objWord;
  8. /** 声明四个word组件*/
  9. private Dispatch custDocprops;
  10. private Dispatch builtInDocProps;
  11. private Dispatch document;
  12. private Dispatch wordObject;
  13. public WordDocumentProperties() {
  14. }
  15. /**
  16. * 打开word文挡
  17. */
  18. public void open(String filename) {
  19. // 创建一个word对象
  20. objWord = new ActiveXComponent(" Word.Application ");
  21. // 为wordobject组件附值
  22. wordObject = (Dispatch) (objWord.getObject()); // 改了这里
  23. // 生成一个只读方式的word文挡组件
  24. Dispatch.put(wordObject, " Visible ", new Variant(false));
  25. // 获取文挡属性
  26. Dispatch documents = objWord.getProperty(" Documents ").toDispatch();
  27. // 打开激活文挡
  28. document = Dispatch.call(documents, " Open ", filename).toDispatch();
  29. }
  30. public void selectCustomDocumentProperitiesMode() {
  31. custDocprops = Dispatch.get(document, " CustomDocumentProperties ").toDispatch();
  32. }
  33. public void selectBuiltinPropertiesMode() {
  34. builtInDocProps = Dispatch.get(document, " BuiltInDocumentProperties ").toDispatch();
  35. }
  36. /**
  37. * 关闭文挡
  38. */
  39. public void close() {
  40. Dispatch.call(document, " Close ");
  41. }
  42. public String getCustomProperty(String cusPropName) {
  43. try {
  44. cusPropName = Dispatch.call((Dispatch) custDocprops, " Item ", cusPropName).toString();
  45. } catch (ComException e) {
  46. cusPropName = null;
  47. }
  48. return cusPropName;
  49. }
  50. public String getBuiltInProperty(String builtInPropName) {
  51. try {
  52. builtInPropName = Dispatch.call((Dispatch) builtInDocProps, " Item ", builtInPropName).toString();
  53. } catch (ComException e) {
  54. builtInPropName = null;
  55. }
  56. return builtInPropName;
  57. }
  58. public static void main(String[] args) {
  59. try {
  60. WordDocumentProperties jacTest = new WordDocumentProperties();
  61. jacTest.open(" s.doc ");
  62. jacTest.selectCustomDocumentProperitiesMode();
  63. jacTest.selectBuiltinPropertiesMode();
  64. String custValue = jacTest.getCustomProperty(" Information Source ");
  65. String builtInValue = jacTest.getBuiltInProperty(" Author ");
  66. jacTest.close();
  67. System.out.println(" Document Val One:  " + custValue);
  68. System.out.println(" Document Author:  " + builtInValue);
  69. } catch (Exception e) {
  70. System.out.println(e);
  71. }
  72. }
  73. }
时间: 2024-10-16 21:42:52

jacob使用入门及问题解析的相关文章

EasyUI基础入门之Parser(解析器)

前言 JQuery EasyUI提供的组件包括功能强大的DataGrid,TreeGrid.面板.下拉组合等.用户可以组合使用这些组件,也可以单独使用其中一个.(使用的形式是以插件的方式提供的) EasyUI体系结构 EasyUI所有的插件主要分为六大部分.Base基础.Layout布局.Menu&Button.Form表单.Window窗口等.从最基础的开始先掌握EasyUI基础部分.Base部分包含了八个基础插件分别为: parser(解析器) easyloader(加载器) draggab

Vuejs入门todolist项目解析

Vue开发入门todolist项目解析 项目:https://github.com/spritecoco... 创建vuejs项目(window系统) li vue init webpack demo1 npm install 原因: fsevent是mac osx系统的,在win或者Linux下使用了 所以会有警告,忽略即可.意思就是你已经安装成功了. npm run dev 代码解析 认识代码形式 1.vueapp.html代码 <div id="app"> <p

React Native入门-实战解析(上)

来自Leo的原创博客,转载请著名出处 我的stackoverflow 概述 随着app端越来越复杂,迭代越来越快,很多app采用原生+html5的方式来实现,然后不知道什么时候,它就有了个高大上的名字 - hybrid app.类似的框架也很多,比较有名的有 Ionic PhoneGap 这种app的原理是,用webview来实现类似原生的界面,也就是用h5写的代码是运行在webview里的.优点很明显 动态部署(不需要每次通过应用商店的审核,尤其是iOS,审核有时候真的觉得两颗蛋不够疼的.)

【SpringMVC架构】SpringMVC入门实例,解析工作原理(二)

上篇博文,我们简单的介绍了什么是SpringMVC,这篇博文,我们搭建一个简单SpringMVC的环境,使用非注解形式实现一个HelloWorld实例,从简单入手,逐步深入. 环境准备 我们需要有基本的java环境,下面只是简单的罗列,不再详细的介绍. jdk1.6以上 eclipse或者myEclipse tomcat6以上 我们使用SpringMVC的版本是Spring3.2.0,下图是最基本的jar包: 在Spring的官方API文档中,给出了所有jar包作用的概述,现列举常用的包以及相关

ECMAScript6 入门 变量的解析赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring) 这句话的解释:第一步从数组或者对象中提取值,第二步将提取到的值对变量进行赋值 1数组的解析赋值 如果解析不成功,那么对应的变量为undefined,同时如果等号的右侧不是可遍历的数据结构,也会进行报错. 解析允许存在默认值,注意,ES6内部使用严格相等运算符,来判断一个位置是否有值,所以只有当一个数组的成员严格等于undefined时,默认值才会起作用     2对象的解析赋值 对象解析与

js模块化入门与commonjs解析与应用

JS模块化的基本原理 commonjs规范 commonjs在前端模块化中的基本使用 commonjs的实现原理 AMD与CMD规范剖析博客链接 一.JS模块化基本原理 在JS没有提出来模块化的时候,开发JS项目比较简单,同时也比较杂乱,第一个问题就是全局变量的管理,为了解决这个问题基本上都使用了命名空间和闭包两个主流的解决方式,但是随着硬件基础和网络环境的改善,前端开发也越来越复杂,需要协同合作,代码复用的需求越来越多,复杂性带来的第一个问题就是命名管理问题再次遇到挑战,然后就是协同开发也被正

opengl es入门---常见代码解析

转自:http://blog.csdn.net/wangyuchun_799/article/details/7736928,尊重原创! 3.1创建渲染缓冲区     GLuint m_renderbuffer;//创建一个渲染缓冲区对象 glGenRenderbuffers(1, &m_renderbuffer);//创建一个渲染缓冲区对象    glBindRenderbuffer(GL_RENDERBUFFER, m_renderbuffer);//将该渲染缓冲区对象绑定到管线上 3.2创

pwn入门系列习题解析(二)

第一题--BITSCTF 2017-Command_Line 查看文件格式以及开启的保护措施,此处全保护均未开启(默认开启ASLR),且为64位ELF. 尝试运行,发现打印出一处地址(基本不用考虑ASLR了),猜测为栈某处地址 放入ida观察逻辑,发现的确打印了栈上的一个地址,可以直接用.此处可以顺便探测一下偏移,0x10+8=0x18,输入0x18个字符后即可覆盖ret.只要注意shellcode位于泄露的栈地址后的0x20处(0x18+8=0x20).至于shellcode直接从网上找就可以

OpenGL ES入门详解

 1.决定你要支持的OpenGL ES的版本.目前,OpenGL ES包含1.1和2.0两个版本,iPhone 3G+和iPad开始支持OpenGL ES2.0.而且这两个版本之间的差异非常大,不仅仅在编程思想上,API之间的差距也很大.因此,如果你想使用OpenGL ES开发3D程序或游戏,那么首先就要决定使用哪个版本,还是说两个版本都支持.OpenGL ES定义了代表不同版本的宏: enum { kEAGLRenderingAPIOpenGLES1 = 1,     //1.1版 kEAGL