博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java 实现word文档在线预览
阅读量:4963 次
发布时间:2019-06-12

本文共 14108 字,大约阅读时间需要 47 分钟。

一、准备工具

1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件

下载地址:http://www.openoffice.org/download/index.html

下载后,解压缩,安装

然后找到安装目录下的program 文件夹

在目录下运行

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

2.通过swfTools将pdf文件转换成swf格式的文件

下载地址:http://www.swftools.org/download.html

3.通过FlexPaper文档组件在页面上进行展示

将flexpaper文件中的js文件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js文件主要是预览swf文件的插件)拷贝至网站根目录;将FlexPaperViewer.swf拷贝至网站根目录下(该文件主要是用在网页中播放swf文件的播放器

4.JODConverter

com.artofsolving
jodconverter
2.2.1

fileUpload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"      pageEncoding="UTF-8"%>        
文档在线预览系统
请上传要处理的文件,过程可能需要几分钟,请稍候片刻。

上传方法有2种

cos组建

docUploadConvertAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>    <%@page import="java.io.*"%>  <%@page import="java.util.Enumeration"%>  <%@page import="com.oreilly.servlet.MultipartRequest"%>  <%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>  <%@page import="filetest.DocConverter"%>  <%  //文件上传采用cos组件上传,可更换为commons-fileupload上传,文件上传后,保存在upload文件夹  //获取文件上传路径  String saveDirectory =application.getRealPath("/")+"upload";  //打印上传路径信息  System.out.println(saveDirectory);  //每个文件最大50m  int maxPostSize = 50 * 1024 * 1024 ;  //采用cos缺省的命名策略,重名后加1,2,3...如果不加dfp重名将覆盖  DefaultFileRenamePolicy dfp = new DefaultFileRenamePolicy();  //response的编码为"UTF-8",同时采用缺省的文件名冲突解决策略,实现上传,如果不加dfp重名将覆盖  MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8",dfp);  //MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8");  //输出反馈信息   Enumeration files = multi.getFileNames();       while (files.hasMoreElements()) {          System.err.println("ccc");         String name = (String)files.nextElement();         File f = multi.getFile(name);         if(f!=null){           String fileName = multi.getFilesystemName(name);           //获取上传文件的扩展名           String extName=fileName.substring(fileName.lastIndexOf(".")+1);           //文件全路径           String lastFileName= saveDirectory+"\\" + fileName;           //获取需要转换的文件名,将路径名中的'\'替换为'/'           String converfilename = saveDirectory.replaceAll("\\\\", "/")+"/"+fileName;           System.out.println(converfilename);           //调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法           DocConverter d = new DocConverter(converfilename);           //调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf;           d.conver();           //调用getswfPath()方法,打印转换后的swf文件路径           System.out.println(d.getswfPath());           //生成swf相对路径,以便传递给flexpaper播放器           String swfpath = "upload"+d.getswfPath().substring(d.getswfPath().lastIndexOf("/"));           System.out.println(swfpath);           //将相对路径放入sessio中保存           session.setAttribute("swfpath", swfpath);           out.println("上传的文件:"+lastFileName);           out.println("文件类型"+extName);           out.println("

"); } } %>
Insert title here

documentView.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  <%      String swfFilePath=session.getAttribute("swfpath").toString();  %>        
文档在线预览系统

普通上传

docUploadConvertAction.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>      
Insert title here

后台方法:

controller:

/**     * 上传文件     */    @RequestMapping("/submit")    public ModelAndView upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception {        if (file.isEmpty()) {            throw new RRException("上传文件不能为空");        }        //上传文件        Map
map = uService.upload(file,request); ModelAndView mav = new ModelAndView(); mav.addObject("url",map.get("url")); mav.addObject("fileName",map.get("fileName")); mav.addObject("swfpath",map.get("swfpath")); mav.setViewName("doc/docUploadConvertAction.jsp"); request.getSession().setAttribute("swfpath",map.get("swfpath")); return mav; }

serviceImpl

@Override    public String getPath() {        String userId = ShiroUtils.getUserId();        UserEntity sysUserEntity = userDao.queryObject(userId);        String userNo = sysUserEntity.getLoginName();        //文件路径        String path = userNo + "/" + DateUtils.format(new Date(), "yyyyMMdd");        return path;    }    @Override    public Map
upload(MultipartFile file, HttpServletRequest request) throws Exception { String Name = file.getOriginalFilename(); //获取上传文件的扩展名 String extName=Name.substring(Name.lastIndexOf(".")); String fileName = String.valueOf(new Date().getTime()/1000)+extName; String path = request.getSession().getServletContext().getRealPath("upload") +"/"+ this.getPath(); File targetFile = new File(path, fileName); if (!targetFile.exists()) { targetFile.mkdirs(); } file.transferTo(targetFile); String filepath = String.valueOf(targetFile); String url = request.getRequestURL().toString().replace(request.getRequestURI(),"")+request.getContextPath()+"/upload/"+this.getPath()+"/"+fileName; int a = url.lastIndexOf(fileName); String b = url.substring(0,a-1); //调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法 DocConverter d = new DocConverter(filepath); //调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf; d.conver(); //调用getswfPath()方法,打印转换后的swf文件路径 System.out.println(d.getswfPath()); //生成swf相对路径,以便传递给flexpaper播放器 String swfpath = b+d.getswfPath().substring(d.getswfPath().lastIndexOf("/")); FileEntity fileEntity = new FileEntity(); fileEntity.setId(Utils.uuid()); fileEntity.setCreateTime(new Date()); fileEntity.setCreateUser(ShiroUtils.getUserId()); fileEntity.setFileName(fileName); fileEntity.setFileUrl(url); fileEntity.setStatus(0); fileDao.save(fileEntity); Map
map = new HashMap
(); map.put("url",url); map.put("fileName",fileName); map.put("swfpath",swfpath); return map; }

documentView.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  <%      String swfFilePath=session.getAttribute("swfpath").toString();  %>        
文档在线预览系统

转换类:

package filetest;import java.io.BufferedInputStream;  import java.io.File;  import java.io.IOException;  import java.io.InputStream;    import com.artofsolving.jodconverter.DocumentConverter;  import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;  import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;  import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;    /**  * doc docx格式转换  */  public class DocConverter {      private static final int environment = 1;// 环境 1:windows 2:linux      private String fileString;// (只涉及pdf2swf路径问题)      private String outputPath = "";// 输入路径 ,如果不设置就输出在默认的位置      private String fileName;      private File pdfFile;      private File swfFile;      private File docFile;            public DocConverter(String fileString) {          ini(fileString);      }        /**      * 重新设置file      *       * @param fileString      */      public void setFile(String fileString) {          ini(fileString);      }        /**      * 初始化      *       * @param fileString      */      private void ini(String fileString) {          this.fileString = fileString;          fileName = fileString.substring(0, fileString.lastIndexOf("."));          docFile = new File(fileString);          pdfFile = new File(fileName + ".pdf");          swfFile = new File(fileName + ".swf");      }            /**      * 转为PDF      *       * @param file      */      private void doc2pdf() throws Exception {          if (docFile.exists()) {              if (!pdfFile.exists()) {                  OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);                  try {                      connection.connect();                      DocumentConverter converter = new OpenOfficeDocumentConverter(connection);                      converter.convert(docFile, pdfFile);                      // close the connection                      connection.disconnect();                      System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath()+ "****");                  } catch (java.net.ConnectException e) {                      e.printStackTrace();                      System.out.println("****swf转换器异常,openoffice服务未启动!****");                      throw e;                  } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {                      e.printStackTrace();                      System.out.println("****swf转换器异常,读取转换文件失败****");                      throw e;                  } catch (Exception e) {                      e.printStackTrace();                      throw e;                  }              } else {                  System.out.println("****已经转换为pdf,不需要再进行转化****");              }          } else {              System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");          }      }            /**      * 转换成 swf      */      @SuppressWarnings("unused")      private void pdf2swf() throws Exception {          Runtime r = Runtime.getRuntime();          if (!swfFile.exists()) {              if (pdfFile.exists()) {                  if (environment == 1) {
// windows环境处理 try { Process p = r.exec("D:/pdf2swf/pdf2swf.exe "+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9"); //Process p=new Process(); System.out.print(loadStream(p.getInputStream())); System.err.print(loadStream(p.getErrorStream())); System.out.print(loadStream(p.getInputStream())); System.err.println("****swf转换成功,文件输出:" + swfFile.getPath() + "****"); if (pdfFile.exists()) { pdfFile.delete(); } } catch (IOException e) { e.printStackTrace(); throw e; } } else if (environment == 2) {
// linux环境处理 try { Process p = r.exec("pdf2swf " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9"); System.out.print(loadStream(p.getInputStream())); System.err.print(loadStream(p.getErrorStream())); System.err.println("****swf转换成功,文件输出:" + swfFile.getPath() + "****"); if (pdfFile.exists()) { pdfFile.delete(); } } catch (Exception e) { e.printStackTrace(); throw e; } } } else { System.out.println("****pdf不存在,无法转换****"); } } else { System.out.println("****swf已经存在不需要转换****"); } } static String loadStream(InputStream in) throws IOException { int ptr = 0; in = new BufferedInputStream(in); StringBuffer buffer = new StringBuffer(); while ((ptr = in.read()) != -1) { buffer.append((char) ptr); } return buffer.toString(); } /** * 转换主方法 */ @SuppressWarnings("unused") public boolean conver() { if (swfFile.exists()) { System.out.println("****swf转换器开始工作,该文件已经转换为swf****"); return true; } if (environment == 1) { System.out.println("****swf转换器开始工作,当前设置运行环境windows****"); } else { System.out.println("****swf转换器开始工作,当前设置运行环境linux****"); } try { doc2pdf(); pdf2swf(); } catch (Exception e) { e.printStackTrace(); return false; } if (swfFile.exists()) { return true; } else { return false; } } /** * 返回文件路径 * * @param s */ public String getswfPath() { if (swfFile.exists()) { String tempString = swfFile.getPath(); tempString = tempString.replaceAll("\\\\", "/"); return tempString; } else { return ""; } } /** * 设置输出路径 */ public void setOutputPath(String outputPath) { this.outputPath = outputPath; if (!outputPath.equals("")) { String realName = fileName.substring(fileName.lastIndexOf("/"), fileName.lastIndexOf(".")); if (outputPath.charAt(outputPath.length()) == '/') { swfFile = new File(outputPath + realName + ".swf"); } else { swfFile = new File(outputPath + realName + ".swf"); } } } }

运行

 

转载于:https://www.cnblogs.com/NCL--/p/10155699.html

你可能感兴趣的文章
深入理解计算机系统第二章习题
查看>>
[BZOJ2877][NOI2012]魔幻棋盘(二维线段树)
查看>>
[BZOJ1500][NOI2005]维修数列(splay)
查看>>
vue+ axios+token 封装axios 封装接口url,带token请求,token失效刷新
查看>>
mysqldump使用方法(MySQL数据库的备份与恢复)
查看>>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0
查看>>
注意力模型代码实现
查看>>
vue实现全选反选
查看>>
深浅拷贝,原生和JQuery方法实现
查看>>
1.- Netty设计理念-异步和事件驱动
查看>>
原始线性结构数组的实现以及操作
查看>>
css之浮动
查看>>
js的实例方法和静态方法分析
查看>>
CSS 3D旋转 hover 后设置transform 是相对于正常位置
查看>>
VIM 模板
查看>>
[转]JAVA设计模式之单例模式
查看>>
MyBatis学习总结
查看>>
1011-大数加法
查看>>
c#向指定的邮箱发送邮件
查看>>
Hibernate4.x之映射关系--单向一对多
查看>>