您的位置:首页 > 其它

在线文档展示系统设计

2015-07-06 09:55 253 查看

背景介绍:

   系统主要功能为在线文档展示,不包括编辑等功能。

   输入为各种文档格式,当前支持为:doc,docx,ppt,pptx,txt,pdf等。

   输出为网页展示。

 

功能实现:

  1.office web apps(尚未测试)

      参考资料: http://blog.csdn.net/xwygn/article/details/8491164

      优点:方便易用,一步到位。

      缺点:必须基于Window系统,同时对展示缺乏灵活配置(未验证)

  2. 将文档转为SWF进行展示

      1)Txt/Word/PPT--->PDF(OpenOffice+JodConverter)--->SWF(pdf2swf)
      2)Txt/Word/PPT--->PDF(MSOffice+JACOB)--->SWF(pdf2swf)
      3)Txt/Word/PPT--->SWF (FlashPaper)(FlashPaper是收费软件)
      4)Txt/Word/PPT--->SWF(print2flash)(关于print2flash的资料很少)
      


[b]      优点:控制灵活[/b]
[b]      缺点:配置部署开发繁琐[/b]
[b]      总体来说,微软文档(OOXML)转换有兼容性问题,推荐使用MS OFFICE作为转换器。[/b]

Document2PDF

 1. 使用MS OFFICE 作为Convertor

[b]      优点:文档兼容性好[/b]

      缺点:Server只能是window平台,并且为收费软件

      具体实现:


      A 利用JCom调用MS Office转换文档为PDF

         [b]1)jcom.dll文件不支持64位系统,所以不使用该方法[/b]

         [b]2)参考资料 http://www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548510.html
[/b]

      B 利用JACOB调用MS Office转换文档为PDF

       1)jacob,官方的解释是Java COM Bridge,即java和 com组件间的桥梁
        [b] 2)jacob.dll文件[/b]
               office是建立在windows平台之上的,本身是一个软件,除了他自己提供的宏似乎没有什么能对他进行直接的操作;在windows平台上为了解决像这样的不同应用软件,通信缺乏通用api问题,推出了com的解决方案;

               我们使用dll中的一组或多组相关的函数存取组件数据,总的合称为接口,具体到每个细节的实现称为方法;如果我们要调用接口里的方法,唯一的途径就是调用指向接口的指针。所以总的来说使用就是dll完成api的转换。

         [b]3)实现步骤:[/b]
               a):在电脑上安装office2010版本

               b):将jacob-1.17-M2-x64.dll放入目录C:\Windows\System32下

               c):将jar包放入maven的本地仓库中,并在pom.xml文件中引入

                     

                       



               d):代码实现将文档转换为pdf

                     



 2. 使用Apache OpenOffice 作为Convertor

[b]     优点:跨平台,开源,免费[/b]

     缺点:对微软格式文档兼容性一般

     具体实现:

     利用JODConverter调用OpenOffice转换文档为PDF


         1)该方案为备选方案,因为OpenOffice转换一些office文档时效果不佳

         2)实现步骤:
               a):在电脑上安装openOffice软件

               b):通过命令行启动openOffice服务  D:\share\var\OpenOffice 4\program\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"

                 然而当OpenOffice的转码服务启动以后,该进程(进程名称是soffice.exe)会一直存在,并且大约占100M的内存,所以可以将执行该服务的命令直接在JAVA代码里面调用,然后当转码完成的时候,直接杀掉这个进程。

                 所以可以省略该步骤,在后面的JAVA代码里面会有解释。

               c):将所有jar包放入maven的本地仓库中,并在pom.xml文件中引入

                     

                      



[b]               d):[b]代码实现将文档转换为pdf[/b][/b]

                     



 

PDF2SWF


 使用swfTools实现将pdf文档转换为swf


4000
         1[b])实现步骤:
[/b]
[b]               a):下载并安装swfTools,调用pdf2swf.exe将pdf转换为swf[/b]
                      


         2[b])swfTools使用时遇到的问题:[/b]
               a: 错误信息:    ERROR   ID Table overflow
                                          ERROR   This file is too complex to render- SWF only supports 65536 shapes at once 


                   错误分析:   需要转换的那个文件大太或者文件图形过多,该软件只能支持65536 shapes 的文件转换。

                                        后台的处理命令为: ...\swfTools\pdf2swf.exe "...\1.pdf" -o ...\1.swf -T 9 -f 

                   解决方法:   pdf2swf[b].exe 1.pdf -o 1.swf -f -T 9 -G -s poly2bitmap               只对文件中的图形转成点阵

                                        pdf2swf.exe 1.pdf -o 1.swf -f -T 9 -G -s bitmap                         对everything 转成点阵

                                        pdf2swf.exe 1.pdf -o 1.swf -f -T 9 -G -s enablezlib  bitmap    对everything 转成点阵,并通过enablezlib压缩[/b]

                   建议在转换的过程时加入对文件的大小的判断,当文件过大时,就加入-s poly2bitmap参数,不然就直接转,不加入这个参数时,转换的速度快一点。用后面的两种的话,页面搜索文字的时候无法搜索。 

           b: 问题描述:Runtime.getRuntime().exec()可以调用操作系统的shell指令。但是这个函数有一个问题,当它把传给它的控制台命令丢给shell执行后,它就立即返回了。页面会显示文档可阅读,实际上此时文档还在后台进行转码。

              问题分析:Runtime.exec()指令返回了一个Process对象,它有一个方法waitFor()来阻塞当前线程。

              解决方法:

                                   



SWF2SHOW


 使用FlexPaper控件实现将swf文件在页面展示

         1[b])实现步骤:[/b]
[b]               a):下载flexPaper控件,并引入项目中[/b]

                      





[b]               b):页面代码实现[/b]

                     定义一个id为viewerPlaceHolder的<a>标签,通过js定义加载文件即可。

                      



         2[b])[b][b]flexPaper[/b]使用时遇到的问题:[/b][/b]
               问题描述: 页面不能播放文档,显示一直在加载中。

               问题分析: 将测试文件6.swf放于documentShow.jsp相同目录下,以相对路径来加载文件,导致无法加载

                              



                               WEB-INF目录是Servlet服务器的一个约定(war或webapp内根目录下的WEB-INF/),它里面的文件是不会自动发布到Web的,不允许外部访问。

                               而我们的jsp文件都放在[b]WEB-INF目录下,通过request请求来访问,所以测试文件放在该目录下是无法访问的。[/b]

                              (ps:Servlet还约定了名叫web.xml的配置文件必须要放在这个目录。这样约定后Tomcat才知道你的配置放在哪,它好读取配置然后启动你的应用。)

               解决方法: 将测试文件放在其他位置来访问,其中,documentUploadDir目录在server里映射到D盘。

                              
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: