在线查看的技术总结

在线查看的效果可以和百度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

原文地址:https://www.cnblogs.com/guanghuiqq/p/2748037.html