引言:
最近项目中对上传的文件需要在线查看功能(就是不用下载到本地,可以直接在网页里打开的查看),通过几周的研究终于搞定,在此总结下供有同样需求的同仁查询和使用。
原理:
通常的在线查看功能都是使用文档转换工具,把原始文档转换成swf文档,然后通过网页直接展示文档内容。
解决方案:
在前期技术研究的过程中,发现有三种解决方案,他们分别是:
1、使用 FlexPaper + Pdf2swf 组合。
缺点是只能提供pdf转换成swf然后在线查看。要支持其他格式的话,需要先转成pdf,这样的话效率有点低。不过网上这种方式的资料挺多的。
相关资料: www.cnblogs.com/luckyxiaoxuan/archive/2012/06/13/2548510.html
2、使用FlashPaper 把文档转成swf直接显示
这种方式的好处在于支持多种格式的文档转换,支持的文档格式包括(doc、docx、xls、xlsx、pdf、txt, ppt、pptx), ppt、pptx的支持效果不怎么好,转换有些慢,要支持这两种方式的话,有专有的转换工具。
原来准备使用FlashPaper转换成swf文档,然后使用FlexPaper显示的,但是发现使用FlexPaper显示FlashPaper转成的swf存在问题,不能显示swf内容,而且不停的闪。后来想起浏览器可以直接支持swf显示的。使用<object><embed>标签即可。
还有一个好处就是这个工具免费。
缺点就是: 最后版本2.2,发布于2008年5月,此后不再支持;支持winxp, server2003等,不支持win7系统;
3、使用Print2Flash把文档转换成swf直接显示
这个东西比FlashPaper更强大,功能更全面,而且提供各种系统的支持。是一个非常不错的工具。
缺点就是:需要money,有需求的公司可以使用。
相关资料: http://www.blue-pacific.com/print2flash/samples/default.htm
我的方案:
我选用的第二种方案,免费,而且对各种当前流行的文档都支持,同时服务器是window server 2003。下面说下具体的程序吧。
1、FlashPaper的安装
可以在网上下载 FlashPaper2.2绿色版,地址: http://download.csdn.net/detail/walkerjong/4420486
下载安装程序后,可以点击install.bat安装FlashPaper,若出现下面的错误:
flashpaper AddPrinterDriver stage 13: error 126 - 找不到指定的模块
错误原因: 安装操作系统的时候没有开启系统还原功能,FlashPaper需要使用该功能。
解决方案: 把安装文件包里的srclient.dll文件拷贝到c:/windows/system32/目录下。
当然也可以使用java程序自动安装,下面是我的工具类代码:FlashPaperUtil.java
package org.study.isap.common.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.log4j.Logger;
public class FlashPaperUtil {
private static final Logger logger = Logger.getLogger(FlashPaperUtil.class);
// flashPaper的存放位置
public static final String FLASH_PAPER_DIR = "bin/flashPaper2_2";
// 转换各种格式的文档为swf的命令
public static final String FLASH_PAPER_CMD = "FlashPrinter.exe";
// 检查swf是否转换完成的最大等待次数
private static final int maxWaitCount = 60;
// 检查swf是否存在的时间间隔, 单位ms。
private static final int checkInterval = 20000;
private static final File flashPaperDir = initDir();
private FlashPaperUtil(){
}
private static File initDir(){
File dir = new File(FileUtil.getWebRootPath(), FLASH_PAPER_DIR);
logger.debug("flashPaperDir["+dir.getAbsolutePath()+"]");
return dir;
}
/**
* 卸载flashPaper。
*/
public static void uninstall(){
String uninstallCmd = "uninstall.bat";
try {
String cmd =new File(flashPaperDir, uninstallCmd).getAbsolutePath();
Runtime runtime = Runtime.getRuntime();
Proce