office文档转换为html的实现方案
1. doc/docx
(1)调用com组件,这种方式实现起来比较简单,使用jacob即可,见 http://danadler.com/jacob/,但其有以下局限性:
*必须得运行在windows机器上
*目前office提供的script功能有限,当word文档错误时,会弹出一些窗口
*当多线程调用时,占用cpu很高,机器很容易down掉 最早解析word时,是采用的com,上线后没多久,因为不稳定,不可靠,就下线了
(2)poi,见http://poi.apache.org,现在它对word的支持还很弱,用它来解析出txt还是可以的,转换为html就很难了
(3)openoffice
openoffice需要jre才能正常安装,所以首先需要安装jre,然后配置java的环境变量
从http://zh.openoffice.org/new/zh_cn/downloads.html这里下载最新的rpm包
安装后,其服务默认是单进程但线程运行的,如果使用其默认的启动参数
即使你启动多个进程,每个对应的port不同,最后soffice也只起了一个进程,但这个进程监听了多个端口,这样,其实还是单进程运行的 后来,参考了oooserver,见http://www.re.be/oooserver/index.xhtml,看了其源码后,发现启动时多加个参数,还是可以启动多个进程实例的
多加了一个UserInstallation参数,该参数指定了安装目录,如果不加该参数,openoffice在启动时会检查是否已经存在了默认目录下对应的soffice的进程,如果存在,可能就不再启动新的实例了 多个进程起来后,需要自己实现一个process pool,控制协调各个进程,保证其同一个时刻只服务一个文档转换 目前,在服务器上起了5个进程,我们会根据日志情况,再来调整进程数目
2.xls
之前也是只使用com组件,出现的问题同上
现在,采用了poi + com来实现,先是用poi来解析,如果发现里面有嵌入组件、图片、图标等内容,则转交给com来出来,否则就由poi自己来解析
使用poi的关键在于,自己要实现单元格合并的处理逻辑
3.pdf
采用了xpdf工具,见http://www.foolabs.com/xpdf/,其能有效的处理中文,但现在只能parser出txt来