jacob使用入门及问题解析

摘要:
//Blog.csdn.net/hemingwang0902/article/details/4377994这篇博客是关于Microsoft Word Java操作的jacob专栏文章指南。雅各布·雅各布和问题分析入门。使用jacob将Word转换为Html或txt。使用jacob将word转换为PDFjava,通过jacob(基于word模板生成动态内容)调用word。

转自: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下
讲解麻烦,画个图大家看 好
jcob
值得注意的是,不同的版本的系统使用不同的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.   
  6. public class WordDocumentProperties {  
  7.     /** 声明一个word对象*/  
  8.     private ActiveXComponent objWord;  
  9.   
  10.     /** 声明四个word组件*/  
  11.     private Dispatch custDocprops;  
  12.   
  13.     private Dispatch builtInDocProps;  
  14.   
  15.     private Dispatch document;  
  16.   
  17.     private Dispatch wordObject;  
  18.   
  19.     public WordDocumentProperties() {  
  20.     }  
  21.   
  22.     /** 
  23.      * 打开word文挡 
  24.      */  
  25.     public void open(String filename) {  
  26.         // 创建一个word对象  
  27.         objWord = new ActiveXComponent("Word.Application");  
  28.         // 为wordobject组件附值  
  29.         wordObject = (Dispatch) (objWord.getObject()); // 改了这里  
  30.         // 生成一个只读方式的word文挡组件  
  31.         Dispatch.put(wordObject, "Visible", new Variant(false));  
  32.         // 获取文挡属性  
  33.         Dispatch documents = objWord.getProperty("Documents").toDispatch();  
  34.         // 打开激活文挡  
  35.         document = Dispatch.call(documents, "Open", filename).toDispatch();  
  36.     }  
  37.   
  38.     public void selectCustomDocumentProperitiesMode() {  
  39.         custDocprops = Dispatch.get(document, "CustomDocumentProperties").toDispatch();  
  40.     }  
  41.   
  42.     public void selectBuiltinPropertiesMode() {  
  43.         builtInDocProps = Dispatch.get(document, "BuiltInDocumentProperties").toDispatch();  
  44.     }  
  45.   
  46.     /** 
  47.      * 关闭文挡 
  48.      */  
  49.     public void close() {  
  50.         Dispatch.call(document, "Close");  
  51.     }  
  52.   
  53.     public String getCustomProperty(String cusPropName) {  
  54.         try {  
  55.             cusPropName = Dispatch.call((Dispatch) custDocprops, "Item", cusPropName).toString();  
  56.         } catch (ComException e) {  
  57.             cusPropName = null;  
  58.         }  
  59.         return cusPropName;  
  60.     }  
  61.   
  62.     public String getBuiltInProperty(String builtInPropName) {  
  63.         try {  
  64.             builtInPropName = Dispatch.call((Dispatch) builtInDocProps, "Item", builtInPropName).toString();  
  65.         } catch (ComException e) {  
  66.             builtInPropName = null;  
  67.         }  
  68.         return builtInPropName;  
  69.     }  
  70.   
  71.     public static void main(String[] args) {  
  72.         try {  
  73.             WordDocumentProperties jacTest = new WordDocumentProperties();  
  74.             jacTest.open("s.doc");  
  75.             jacTest.selectCustomDocumentProperitiesMode();  
  76.             jacTest.selectBuiltinPropertiesMode();  
  77.             String custValue = jacTest.getCustomProperty("Information Source");  
  78.             String builtInValue = jacTest.getBuiltInProperty("Author");  
  79.             jacTest.close();  
  80.             System.out.println(" Document Val One:  " + custValue);  
  81.             System.out.println(" Document Author:  " + builtInValue);  
  82.         } catch (Exception e) {  
  83.             System.out.println(e);  
  84.         }  
  85.     }  
  86. }  

免责声明:文章转载自《jacob使用入门及问题解析》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微信支付v3发布到iis时的证书问题(转)Linux 内存占用大排查下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Niagara workbench 介绍文档---翻译

一、 发现在建立station的时候存在一些问题,所以对技术文档部分做一个详细的了解,在这之前对出现的问题总结一下     1、  在 Windows操作系统中Application Direction中可以同时显示几个Station。启动station之后status状态一直显示的是Starting 不能递进到Running,但是Station也能打开。...

.net framework 4.5为啥在IIS中找不到了

今天心血来潮,下了个VS2012安装玩玩,整个过程很傻瓜化,一切是那么的顺呀!   有一点需要注意,VS2012中的组件安装都是集成在一起的,这不像2010以及之前版本,你不会在控制面板中看到一大堆的安装组件出现,这也包括了MVC4。如果你之前独立安装过MVC4的beta或RC版本,那你安装的只是对Vs2010有用,和2012种的没有半毛的关系,也就是说...

iView组件添加API中介绍的事件的方式(render方式添加事件)

iView组件好用,文档齐全,品质可靠稳定。最大的好处是使用了Vue框架,使很多数据绑定和交互问题变的轻松,是难得的开源前端组件。给作者点个赞。用这个组件来学习Vue.js也是不错的选择。 最近用的比较多。碰到的主要问题是绑定事件,试了很多种写法,可能是对vue不太了解,一直没试对。最终发现写法其实很简单。 用现成的组件,比如API里写了一个事件是on-c...

关于js在iframe中显示与隐藏的控制方式(display、visilibity以及hide()/show())

引子: 在项目开发过程中,使用iframe嵌套不同的页面,通过菜单来控制页面的切换展示。最开始使用的是show()和hide()方法来控制页面的展示与隐藏,但是遇到嵌套的页面高度不固定, 当嵌套页面过高会出现滚动条,如果拉下滚动条到某个位置,然后切换页面,再切换到上个页面时滚动条就自动到顶部而不是在之前下拉到的位置,所以这就存在问题。 这里,自己简单写了一...

极致 Web 性能 —— SPA 性能指南

前言 前端框架时代,为开发体验、效率与页面性能带来,非常大的革命。大家纷纷拿起一系列打包工具(webpack/parcel etc.),配合一系列加载器快速搭建起一个 SPA 页面。 SPA 应用带来的好处非常明显: 提升页面切换体验 降低切换时间 易于部署&前后端分离 但是也带来一系列性能问题: 初始加载脚本较大 首屏空白时间较长 页面返回...

百度地图滚轮缩放时产生位置偏移 问题

最近在调用百度地图的过程中,发生了在地图上滚轮缩放,结果产生了位置偏移的情况,同样在移动端,双指缩放也有同样的问题。 这个问题产生的原因主要是因为百度地图加载的位置因为定位等原因,与整个html 页面产生了不同步滚动的问题。 百度地图的缩放是基于body层的,如果body层有滚动条,并且不在最顶端,在当前位置插入了百度地图,也就是出现该问题时的状态,这个时...