论坛首页 Java企业应用论坛

WORD文档比较的一些思路

浏览 6656 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-22   最后修改:2009-06-20

有一个需求是这样的,用户甲上传一个WORD文档给用户乙进行审批,用户甲就是文件创建者,而用户乙就是文件修改者,当然他可以进行多次修改,一直到他锁定该文档不能再修改为止,用户甲和用户乙需要看到的就是用户乙修改后的文档比较。

 

 

相信很多人都用过Tortoise这个工具,里面就有一个TortoiseMerge,用来比较不同版本的文档,如图:

 

或者是简单的文本文档的比较,看了一下TortoiseMerger如何实现WORD文件的比较,还是首先把WORD文件的内容提取出来,然后再进行文本比较,如下图:

 

今天在无忧脚本里看到一个简单的公文批注js版:http://bbs.51js.com/viewthread.php?tid=10643&extra=page%3D1 ,那里是基于VML+DOM实现的,可以保留痕迹,但是用户必须在页面上进行操作

 

还好在TortoiseMerge是开源的,用底层C++来实现,源码在http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk/src/TortoiseMerge(用TortoiseSVN checkout,用户名是guest,密码是空的)

 

现在基本思路是当用户修改文档这个事件发生,异步用JNI调用编译好的TortoiseMerge来实现两个文档的比较,把比较后的结果保存在一个WORD文档里面。

 

当然可以说客户的需求BT,可以委婉拒绝客户的这个想法,不知道大家有什么好的思路。

 

附:最近找到一个简单的WORD文档比较工具:CSDiff,下载地址是:http://www.brothersoft.com/csdiff-download-4744.html

它可以通过命令行进行操作:先切换到安装目录下,然后执行命令CSDiff.exe c:\原始文档.doc c:\修改文档.doc

会弹出一个对比后的文档:文档1,此时调用Jacob组件能保存对比的文档

 

CSDiff的命令行操作:

CSDiff.exe /OoutFormatOutfile [/bblanksMode] [/scomparMethod] [/i] [/n] [/t=nnn] [/q] BaseFileName CmpFileName [BaseFileTitle CmpFileTitle]

   发表时间:2009-05-25  
另外还有一个思路,就是在比较两个WORD文档之前,先分别从WORD文档提取它的内容(当然WORD文档不包括图片),保存成XML文件然后再比较,根据比较的结果写进WORD文档。
这中间的关键点在于读取WORD文件的内容(包括常见的Table格式),然后进行比较的算法。
0 请登录后投票
   发表时间:2009-05-25  
这个我现在也在想,当还没有好办法,你的可行吗,java能做到更好,期待你的答案!!!
0 请登录后投票
   发表时间:2009-06-03  
WORD2003和WORD2007都有相应的文档比较工具:
WORD2003:比如要比较A文档和B文档,先打开A文档,再选择 “工具--->比较并合并文档”菜单,在弹出的对话框里打开B文件,然后就可以实现比较。
WORD2007:同WORD2003,区别是选择"工具---->比较"菜单
========================
在网上搜索了一把,发现csdiff(http://www.freedownloadmanager.org/downloads/CSDiff_12343_p/)是个好的文件比较工具,免费的,暂时还没找到源码
0 请登录后投票
   发表时间:2009-06-03  
POI Text Extraction可以抽取Word的文本内容
不过格式复杂一点的效果就不好
0 请登录后投票
   发表时间:2009-06-03  

   光是文本比较很容易了。 如果有图片,或表格,以及其它特殊格式,比较起来就稍麻烦一点
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics