有一个需求是这样的,用户甲上传一个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]