在线文档展示系统设计
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的资料很少)
![](http://192.168.1.241/download/attachments/10944519/image2014-12-11+13%3A21%3A24.png?version=1&modificationDate=1418275523000)
[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文件中引入
![](http://192.168.1.241/download/attachments/10944519/image2014-12-11+10%3A42%3A19.png?version=1&modificationDate=1418266445000)
![](http://192.168.1.241/download/attachments/10944519/image2014-12-11+10%3A43%3A5.png?version=1&modificationDate=1418266445000)
d):代码实现将文档转换为pdf
![](http://192.168.1.241/download/attachments/10944519/image2014-12-11+10%3A45%3A15.png?version=1&modificationDate=1418266445000)
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文件中引入
![](http://192.168.1.241/download/attachments/10944519/image2014-12-11+11%3A26%3A2.png?version=1&modificationDate=1418268571000)
![](http://192.168.1.241/download/attachments/10944519/image2014-12-11+11%3A31%3A38.png?version=1&modificationDate=1418268907000)
[b] d):[b]代码实现将文档转换为pdf[/b][/b]
![](http://192.168.1.241/download/attachments/10944519/image2014-12-11+11%3A43%3A19.png?version=1&modificationDate=1418269608000)
PDF2SWF
使用swfTools实现将pdf文档转换为swf
4000
1[b])实现步骤:[/b]
[b] a):下载并安装swfTools,调用pdf2swf.exe将pdf转换为swf[/b]
![](http://192.168.1.241/download/attachments/10944519/image2014-12-11+10%3A49%3A49.png?version=1&modificationDate=1418266445000)
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()来阻塞当前线程。
解决方法:
![](http://192.168.1.241/download/attachments/10944519/image2014-12-16+15%3A24%3A57.png?version=1&modificationDate=1418714899000)
SWF2SHOW
使用FlexPaper控件实现将swf文件在页面展示
1[b])实现步骤:[/b][b] a):下载flexPaper控件,并引入项目中[/b]
![](http://192.168.1.241/download/attachments/10944519/image2014-12-12+17%3A44%3A30.png?version=1&modificationDate=1418377678000)
![](http://192.168.1.241/download/attachments/10944519/image2014-12-12+17%3A45%3A26.png?version=1&modificationDate=1418377734000)
[b] b):页面代码实现[/b]
定义一个id为viewerPlaceHolder的<a>标签,通过js定义加载文件即可。
![](http://192.168.1.241/download/attachments/10944519/image2014-12-12+17%3A46%3A46.png?version=1&modificationDate=1418377814000)
2[b])[b][b]flexPaper[/b]使用时遇到的问题:[/b][/b]
问题描述: 页面不能播放文档,显示一直在加载中。
问题分析: 将测试文件6.swf放于documentShow.jsp相同目录下,以相对路径来加载文件,导致无法加载
![](http://192.168.1.241/download/thumbnails/10944519/image2014-12-12+17%3A50%3A2.png)
WEB-INF目录是Servlet服务器的一个约定(war或webapp内根目录下的WEB-INF/),它里面的文件是不会自动发布到Web的,不允许外部访问。
而我们的jsp文件都放在[b]WEB-INF目录下,通过request请求来访问,所以测试文件放在该目录下是无法访问的。[/b]
(ps:Servlet还约定了名叫web.xml的配置文件必须要放在这个目录。这样约定后Tomcat才知道你的配置放在哪,它好读取配置然后启动你的应用。)
解决方法: 将测试文件放在其他位置来访问,其中,documentUploadDir目录在server里映射到D盘。
![](http://192.168.1.241/download/attachments/10944519/image2014-12-12+18%3A4%3A35.png?version=1&modificationDate=1418378883000)
相关文章推荐
- C++拷贝构造函数详解
- 每月自评之十二:2015年6月
- OpenCV之八 线性邻域滤波专场:方框滤波、均值滤波与高斯滤波
- 适配 iOS尺寸
- Android Handler Message多线程实例
- 网络基础
- jQuery 选择器/筛选
- Mysql数据类型
- MICROSOFT SQL SERVER 2012
- opencl buffer
- SharePoint 2010 站点附加数据升级到SP2013
- 第4章 部署模式 Three-Tiered Distribution(三级分布)
- 回溯法——列举多维向量
- iOS8—LanuchImage的设置方法
- Makefile 里的 subst 函数
- 基于SVM和神经网络的车牌识别
- select()函数以及FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- hibernate之实体@onetomany和@manytoone双向注解
- 在Ubuntu Kylin15.05上安装MongoDB
- hamlpy 的安装