锁定老帖子 主题:WORD文档比较的一些思路
精华帖 (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] 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-25
另外还有一个思路,就是在比较两个WORD文档之前,先分别从WORD文档提取它的内容(当然WORD文档不包括图片),保存成XML文件然后再比较,根据比较的结果写进WORD文档。
这中间的关键点在于读取WORD文件的内容(包括常见的Table格式),然后进行比较的算法。 |
|
返回顶楼 | |
发表时间:2009-05-25
这个我现在也在想,当还没有好办法,你的可行吗,java能做到更好,期待你的答案!!!
|
|
返回顶楼 | |
发表时间:2009-06-03
WORD2003和WORD2007都有相应的文档比较工具:
WORD2003:比如要比较A文档和B文档,先打开A文档,再选择 “工具--->比较并合并文档”菜单,在弹出的对话框里打开B文件,然后就可以实现比较。 WORD2007:同WORD2003,区别是选择"工具---->比较"菜单 ======================== 在网上搜索了一把,发现csdiff(http://www.freedownloadmanager.org/downloads/CSDiff_12343_p/)是个好的文件比较工具,免费的,暂时还没找到源码 |
|
返回顶楼 | |
发表时间:2009-06-03
POI Text Extraction可以抽取Word的文本内容
不过格式复杂一点的效果就不好 |
|
返回顶楼 | |
发表时间:2009-06-03
光是文本比较很容易了。 如果有图片,或表格,以及其它特殊格式,比较起来就稍麻烦一点 |
|
返回顶楼 | |
浏览 6656 次