在线查看的效果可以和百度touban类似。技术如下:
0、jar 导入jar包:jodconverter-2.2.2.jar & jodconverter-cli-2.2.2.jar
--------------------------------------------------------------------------------
1、action
/** * */
import java.io.File; import java.io.FileNotFoundException; import java.util.HashSet; import java.util.Set;
import org.crm.dao.common.FileUploadItemDAO; import org.crm.modules.CentricDefaultActionSupport; import org.crm.modules.common.FileUploadItem; import org.crm.utils.DOC2SWFUtil; import org.crm.utils.system.CommonUtil; import org.crm.utils.system.Constants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionContext;
/** * @author sgh * */ @Controller("fileconvertAction") @Scope("request") public class FileConvertAction extends CentricDefaultActionSupport { private static final long serialVersionUID = 1526802710363946274L; /* 文件上传下载处理*/ @Autowired private FileUploadItemDAO fileUploadItemDao; private static final Set<String> supportedTypes; private Long id; public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
static{ //pdf,zip,rar,doc,xls,xlsx,ppt,pptx,bmp,jpg,gif,pcx,psd,jpeg,png:允许上传的文件类型 supportedTypes = new HashSet<String>(); supportedTypes.add("doc"); supportedTypes.add("docx"); supportedTypes.add("xls"); supportedTypes.add("xlsx"); supportedTypes.add("ppt"); supportedTypes.add("pptx"); supportedTypes.add("pdf"); supportedTypes.add("jpg"); supportedTypes.add("gif"); supportedTypes.add("txt"); }
public String queryFile(){ FileUploadItem fileItem = fileUploadItemDao.get(this.id); String filepath = fileItem.getFilePath(); String suffix = fileItem.getFileExtension(); //在线显示的swf文件是否存在 File convertFile = new File(CommonUtil.strcat(Constants.FILE_UPLOAD_PATH,filepath+".swf")); //判断待显示文件格式是否支持在线查看 String suffix_tmp = suffix.indexOf(".")==0?suffix.substring(1).toLowerCase():suffix.toLowerCase(); boolean supported = supportedTypes.contains(suffix_tmp); //判断原文件是否存在 File orginFile = new File(CommonUtil.strcat(Constants.FILE_UPLOAD_PATH,filepath)); //启动文档转换线程 if(!convertFile.exists() && supported && orginFile.exists()){ new DOC2SWFUtil(CommonUtil.strcat(Constants.FILE_UPLOAD_PATH,filepath),suffix).start(); } ActionContext.getContext().put("json","{convertFileExists:"+convertFile.exists()+",supported:"+supported +",orginFileExists:"+orginFile.exists()+"}"); return AJAX; } public String getFile() throws FileNotFoundException{ FileUploadItem fileItem = fileUploadItemDao.get(this.id); String filepath = fileItem.getFilePath()+".swf"; this.getDownloadInfo().setInputStream(filepath); return "showfile"; } }
--------------------------------------------------------------------------------
2、jsp
------------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="org.crm.utils.system.*" %> <%@ include file="/templates/taglibs.jsp"%> <% String pid = (String)request.getParameter("id"); %> <html> <head> <style type="text/css" media="screen"> #flashContent { display:none; } </style>
<script type="text/javascript" src="./../javascript/flexpaper/swfobject/swfobject.js"></script> <script type="text/javascript"> if(window.addEventListener) window.addEventListener('DOMMouseScroll', handleWheel, false); window.onmousewheel = document.onmousewheel = handleWheel;
if (window.attachEvent) window.attachEvent("onmousewheel", handleWheel);
function handleWheel(event){ try{ if(!window.document.FlexPaperViewer.hasFocus()){return true;} window.document.FlexPaperViewer.setViewerFocus(true); window.document.FlexPaperViewer.focus(); if(navigator.appName == "Netscape"){ if (event.detail) delta = 0; if (event.preventDefault){ event.preventDefault(); event.returnValue = false; } } return false; }catch(err){return true;} }
</script> <script type="text/javascript"> // alert(basePath); var swfVersionStr = "9.0.124"; var xiSwfUrlStr = "${expressInstallSwf}"; var flashvars = { SwfFile : '${basePath}/flexpaper/fileconvert!getFile?id=<%=pid%>', Scale : 0.6, ZoomTransition : "easeOut", ZoomTime : 0.5, ZoomInterval : 0.1, FitPageOnLoad : false, FitWidthOnLoad : true, PrintEnabled : false, FullScreenAsMaxWindow : true, ProgressiveLoading : true, localeChain: "en_US" }; var params = { }; params.quality = "high"; params.bgcolor = "#ffffff"; params.allowscriptaccess = "sameDomain"; params.allowfullscreen = "true"; var attributes = {}; attributes.id = "FlexPaperViewer"; attributes.name = "FlexPaperViewer"; swfobject.embedSWF( "FlexPaperViewer.swf", "flashContent", "1000", "600", swfVersionStr, xiSwfUrlStr, flashvars, params, attributes); swfobject.createCSS("#flashContent", "display:block;text-align:left;"); </script> </head>
<body> <div id="flashContent"> </div> </body>
</html>
-----------------------------------------------------------------------------------
3、js
-----------------------------------------------------------------------------------
function showFileOnline(id){
$.post(basePath+"flexpaper/fileconvert!queryFile", { "id": id },
function(data){
//根据返回结果判断是否存在,存在则显示,否则给出转换提示
var result = eval("("+data+")");
if(result.convertFileExists){
var baseUrl = basePath+"flexpaper/showfile.jsp?id="+id;
window.showModalDialog(baseUrl,window,"dialogWidth=1024px;dialogHeight=768px;status=no;resizable=yes;location=no");
}else if(!result.orginFileExists){
alert("文件不存在");
}else if(!result.supported){
alert("文件格式不支持在线阅读");
}else{
alert("文档正在转换,请稍后进行查看");
}
});
}
------------------------------------------------------------------------------------
4、swf:flexPaperView.swf 一个flash文件。
---------------------------------------------
5、在查看文件时调用js方法。
---------------------------------------
完成。
-----------===========================================
安装openoffice的事情,可以直接在官网下载安装。配置path路径:path=c:\\program files\\openoffice;
开启openoffice服务器:cmd---->soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard