在线文档的协同浏览 doc pdf ppt ---> swf 的转换

文章来源: http://www.javaeye.com/topic/392457
以前我刚工作的时候,做一个视频的项目,用的是flash media server 和flash。其中有个需求是在线的文档协同浏览,也就是,用户上传一个word文档,ppt,pdf之类的,然后在浏览器里显示出来,还可以在上面涂涂画画的,并且是所有用户都能看见的。当时为文档的转换很头疼,一直也没有好的方法,不过这个项目最后也没成功。

     以前的那种转换的思路不是很好,是将doc转换为图片,然后再操作,用了一个c库,还非要在windows上搞。现在竟然又要做一个在线文档转换和协同浏览的功能,不过换了一种思路,而且方法也成熟可靠很多。

     现在的思路是  doc,ppt,excel ,txt --->pdf ---> 分割pdf ----> pdf --->swf 。这样就可以分别操作每一页的文档了。

     首先 我们要做的就是把doc 转换 为pdf ,这个用OpenOffice很方便的。服务器用的是linux,我装的是ooo3。装ooo的时候记得装pyuno bridge组件。然后我们需要用到unoconv
,这其实是一个python文件,调用ooo来转换各种文档,比如,将a.doc转换为pdf ,那么只需要 unoconv -f pdf a.doc 就会生成一个a.pdf 。在使用unoconv的时候有两个需要注意的问题。

    第一个就是需要 x-server ,如果没有x,在转换的时候会报这样的错误:

/usr/lib/openoffice.org/program/soffice.bin X11 error: Can't open display:

Set DISPLAY environment variable, use -display option

or check permissions of your X-Server

(See "man X" resp. "man xhost" for details)



但是我是有x桌面的,在转换的时候仍然会有这样的错误,解决的方法是导入环境变量 exprot DISPLAY=localhost:1 ,这样就能成功转换,但是,作为服务器是不开 x 的。解决方法是虚拟一个x 桌面 ,详情请 猛击这里



      还有一个问题,非常的恶心。每次从windows上传txt格式的文档,openoffice都报错说不能识别。我认为是编码的问题,于是我在文件上传的过程中都将文本从gb2312 转换为 utf-8 , 但是仍然不能识别。后来发现竟然是windows的换行符 。把  windows的换行符替换为 \n ,就解决了这个问题。


     接下来我们需要分割pdf,每一页一个小pdf,我用的是java的iText库。

     最后把pdf转换为swf ,用 swftools
,有deb格式的,可以 apt-get install swftools ,如果用其他版本的系统,只有自己编译了。编译的时候需要一些开发库 libgif-dev jpeglib-dev freetype-dev 之类的,也都要装上。剩下的 make和make install 就可以了。编译好以后可以得到一些可执行程序,其中 pdf2swf就是我们需要的 pdf2swf path/xx.pdf -o path/xx.swf 就能转换了
 
 
     能够转换以后,写程序串联起来,分别调用这些命令,就可以了。我是用python写的,经过一些简单的测试,效果不错。