[转]Java2word(jacob)操作word文档--eclipse的兼容问题解决

论坛 期权论坛     
选择匿名的用户   2021-5-30 01:55   525   0
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;" width="100%"><tbody><tr><td align="center">
    <table border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;" width="100%"><tbody><tr><td width="100%">
        <div id="art" style="text-align:left;">
         前一个月搞的一个招生项目需要动态生成word文档并插入数据。好找一遍发现了Java2Word这个包。java2word是com桥jacob包的封装,它专门针对word文档的操作做了封装,方便使用。
         <br>
         <br>说实话,java2word本身做的不咋地,兼容性不好,也不大稳定。在设计解决方案的时候因为这一点费了不少劲。现总结如下:
         <br>
         <br>1.   安装java2word。该过程将其中的jacob.dll动态链接库复制到system32目录下,可能还有注册操作;
         <br>
         <br>2.   将java2word.jar包复制到tomcat的lib下,引用至工程的build path中,或者直接复制到工程lib下。这两步保证了其中的jacob类正常连接com组件;
         <br>
         <br>3.   编写访问类(见附录);
         <br>Java2word中每个word文档对应一个document对象。Document对象拥有open、close、insert以及find和 replace等多种方法。另外,document还含有style属性及其getter和setter来设置word文档指定元素的格式,但这一属性我没用到。原因是只需在目标word文档中待插入数据的位置预先设置好格式,即可保证插入后的文档符合要求(除非需要动态改变)。
         <br>
         <br>4.   Eclipse的兼容性问题。
         <br>Java2word,或者说jacob本身对eclipse支持不是很好,在netbean上倒是可以正常调用。对于使用myeclipse的工程,仅按照上面设置可能会出错。这时可作如下处理:
         <br>将jacob.dll复制一份到eclipse使用的jdk/bin下(无需注册),这样就可以保证Jacob or java2word的正常工作。(这问题当时快把我给折腾死了)
         <br>
         <br>5.   Word本身对象模型的兼容性问题。
         <br>由于涉及到com组件,就必须考虑到与其通信的com组件本身的特性。我在开发时,系统环境是word 2007(当然是D版^^),结果错误百出,经常报java.lang.exception或者application.word没有注册的错误。在朋友提醒后我才恍然大悟:word2003跟2007的对象模型压根儿就是不一样的(至少有差别)。在换成2003后,问题搞定。
         <br>
         <br>后话:其实对于传统word文档的操作一般都会使用asp.net等语言去完成,java与com组件的通信还是其一大软肋。当前的com桥有poi、jcom、jacob等。其中poi简洁易用但功能较弱,jacob功能强大但上手较慢,需视需求而定。
         <br>
         <br>但这个问题在以openxml为基础的2007文档中是不存在的。2007文档实际上是对一组xml的压缩包,其内部结构可以通过将.docx的文档改名为.rar后打开查看便一目了然。这时我们只需要找到存储数据的xml,按照其格式来读取即可。
         <br>
         <br>至于2007格式的word文档,见我转载的文章
         <a href="http://hi.baidu.com/thinkdifferent/blog/item/e9e0a87740964d1db051b99d.html"><span style="color:#0000ff;">Java操作office 2007文档</span></a>。
         <table border="1" cellpadding="0" cellspacing="0" style="border-collapse:collapse;" width="95%"><tbody><tr><td> <p style="line-height:150%;"><code><span style="color:#000000;"><span style="color:#ff9900;">/**<br>* This is the basic class to operate office files by Java, it&#39;s not suggested<br>* to use itself.Please use the classes derived from it.<br>*<br>* &#64;filename: Convertor.java<br>* &#64;author Me<br>*/</span><br><span style="color:#0000ff;">package</span> <span style="color:#0000cc;">*</span><span style="color:#0000cc;">*</span><span style="color:#0000cc;">*</span><span style="color:#0000cc;">.</span><span style="color:#0000cc;">*</span><span style="color:#0000cc;">*</span><span style="color:#0000cc;">*</span><span style="color:#0000cc;">.</span><span style="color:#ff0000;">system</span><span style="color:#0000cc;">.</span><span style="color:#ff0000;">document</span><span style="color:#0000cc;">;</span><br><br><span style="color:#0000ff;">import</span> com<span style="color:#0000cc;">.</span>heavenlake<span style="color:#0000cc;">.</span>wordapi<span style="color:#0000cc;">.</span><span style="color:#ff0000;">Document</span><span style="color:#0000cc;">;</span><br><br><span style="color:#0000ff;">import</span> <span style="color:#ff0000;">java</span><span style="color:#0000cc;">.</span><span style="color:#ff0000;">io</span><span style="color:#0000cc;">.</span><span style="color:#ff0000;">File</span><span style="color:#0000cc;">;</span><br><span style="color:#0000ff;">import</span> <span style="color:#ff0000;">java</span><span style="color:#0000cc;">.</span><span style="color:#ff0000;">util</span><span style="color:#0000cc;">.</span><span styl
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP