Java模拟实现百度文档在线浏览

Java模拟实现百度文档在线浏览

这个思路是我参考网上而来,代码是我实现。

采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper浏览。

ok,

A、下载OpenOffice (转换资源文件)

B、下载JodConverter(调用OpenOffice)

C、下载Swftools(Pdf2Swf)

D、下载 FlexPaper(浏览swf文件)

这里我已经全部下载好了,大家只需要下载: http://down.51cto.com/data/1980603

下载之后,先别急安装,请看完这篇博文

1、先看我们的MyEclipse工程结构

2、

将我们下载下来的  解压之后将所有的 jar 文件拷贝到 baiduDoc 的 lib 下面去

3、   在 WebRoot 下面新建  文件夹,将解压后的  全部拷贝到 FlexPaper中去

4、 新建BaiDuServlet.java文件

package com.baidu.util;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.net.ConnectException;import javax.imageio.stream.FileImageInputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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;/**
 * @Author:NuoYan
 * @Date:2015-2-2 下午2:24:58 
 * TODO: 1、第一步,首先获取到需要查看的文件
 *       2、第二部,将获取的文件(doc,xls,txt,ppt,03/07版本转化为PDF),这一步需要调用OpenOffice
 *       3、第三部,将资源文件转换好的PDF文件转换为swf文件,使用FlexPaperViewer.swf进行浏览查看
 */public class BaiDuServlet extends HttpServlet {  private File sourceFile;// 要转化的源文件  private File pdfFile;// pdf中间文件对象  private File swfFile;// swf目标文件对象  private String filePath;// 用来保存文件路径  private String fileName;// 不包括后缀名的文件名  public File getSourceFile() {    return sourceFile;  }  public void setSourceFile(File sourceFile) {    this.sourceFile = sourceFile;  }  public File getPdfFile() {    return pdfFile;  }  public void setPdfFile(File pdfFile) {    this.pdfFile = pdfFile;  }  public File getSwfFile() {    return swfFile;  }  public void setSwfFile(File swfFile) {    this.swfFile = swfFile;  }  public String getFilePath() {    return filePath;  }  public void setFilePath(String filePath) {    this.filePath = filePath;  }  public String getFileName() {    return fileName;  }  public void setFileName(String fileName) {    this.fileName = fileName;  }  public void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    String saveFileName = request.getParameter("savFile");    System.out.println(saveFileName);    String webPath = request.getRealPath("/");    filePath = webPath + "reader\\" + saveFileName;    fileName = filePath.substring(0, filePath.lastIndexOf("."));    // 创建三个文件对象    sourceFile = new File(filePath);    pdfFile = new File(fileName + ".pdf");    swfFile = new File(fileName + ".swf");    System.out.println(pdfFile);    System.out.println(swfFile);    // 1、将源文件转化为pdf格式文件    src2pdf();    try {      // 2、将pdf文件转化为swf文件      pdf2swf();    } catch (Exception e) {      e.printStackTrace();    }    // 将转化好的文件绑定到session上去    request.getSession().setAttribute("swfName", swfFile.getName());    System.out.println(swfFile.getName());    // 重定向到预览页面    response.sendRedirect(request.getContextPath() + "/reader/baseFile.jsp");  }  /**   * @Author:NuoYan   * @Date:2015-2-2 下午2:28:22 TODO://源文件转化为PDF文件   */  private void src2pdf() {    if (sourceFile.exists()) {      // 如果不存在,需要转份为PDF文件      if (!pdfFile.exists()) {        // 启用OpenOffice提供的转化服务        OpenOfficeConnection conn = new SocketOpenOfficeConnection(8100);        // 连接OpenOffice服务器        try {          conn.connect();          // 建立文件转换器对象          DocumentConverter converter = new OpenOfficeDocumentConverter(              conn);          converter.convert(sourceFile, pdfFile);          // 断开链接          conn.disconnect();          System.out.println("转换成功");        } catch (ConnectException e) {          e.printStackTrace();        }      } else {        System.out.println("已经存在PDF文件,不需要在转换!!");      }    } else {      System.out.println("文件路径不存在!!!");    }  }  /**   * @Author:NuoYan   * @Date:2015-2-2 下午2:28:32   * @throws Exception   * TODO:PDF转化为SWF文件   */  private void pdf2swf() throws Exception {    if (!swfFile.exists()) {      if (pdfFile.exists()) {        String command = "C:\\Pdf2swf\\pdf2swf.exe "            + pdfFile.getPath() + " -o " + swfFile.getPath()            + " -T 9";        System.out.println("转换命令:" + command);        // Java调用外部命令,执行pdf转化为swf        Runtime r = Runtime.getRuntime();        Process p = r.exec(command);        System.out.println(loadStream(p.getInputStream()));        System.out.println("swf文件转份成功!!!");        System.out.println(swfFile.getPath());      } else {        System.out.println("不存在PDF文件");      }    }  }    private static String loadStream(InputStream in) throws Exception {    int len = 0;    in = new BufferedInputStream(in);    StringBuffer buffer = new StringBuffer();    while ((len = in.read()) != -1) {      buffer.append((char) len);    }    return buffer.toString();  }

}

5、 修改index.jsp

<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>百度文库在线预览</title>   <meta http-equiv="pragma" content="no-cache">   <meta http-equiv="cache-control" content="no-cache">   <meta http-equiv="expires" content="0">    
   <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">   <meta http-equiv="description" content="This is my page">  </head>  <body>   <a href="<%=request.getContextPath()%>/BaiDuServlet?savFile=1234.xls">在线预览</a>  </body></html>

6、 编写baseFile.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>在线阅读</title><script type="text/javascript" src="../FlexPaper/js/flexpaper_flash.js"></script><style type="text/css">html,body{height: 100%;}body {  margin: 0;padding: 0;overflow: auto;}#flashContent { display:none; }</style></head><body><div style="position:absolute;left:10px;top:10px;">      <a id="viewerPlaceHolder" style="width:1000px;height:480px;display:block"></a>      <script type="text/javascript">         var fp = new FlexPaperViewer(	
             '../FlexPaper/FlexPaperViewer',             'viewerPlaceHolder', { config : {             SwfFile : escape('../reader/<%=(String)session.getAttribute("swfName")%>'),             Scale : 0.6, 
             ZoomTransition : 'easeOut',             ZoomTime : 0.5,             ZoomInterval : 0.2,             FitPageOnLoad : true,             FitWidthOnLoad : false,             FullScreenAsMaxWindow : false,             ProgressiveLoading : false,             MinZoomSize : 0.2,             MaxZoomSize : 5,             SearchMatchAll : false,             InitViewMode : 'Portrait',             PrintPaperAsBitmap : false,             ViewModeToolsVisible : true,             ZoomToolsVisible : true,             NavToolsVisible : true,             CursorToolsVisible : true,             SearchToolsVisible : true,
  						 localeChain: 'zh_CN'             }});      </script>    </div></body></html>

注意baseFile.jsp中的代码,不会你可以参考这里

/**************************************************************************************/

7、 到这里就完成,需要注意的是:

1、  文件安装路径不要太深,不然 Java 调用外部命令不能执行,我这里是 C盘下

2、 

2.1、红色1标记路径不能错,我就犯这个错误了

2.2、红色标记2还可以写 http://127.0.0.1:8080/baiduDoc/reader/...

3、 启动OpenOffice的命令,不是直接双击启动的。官网启动方式,使用cd命令打开安装目录!

安装完openoffice后

1.安装服务

cd C:\Program Files (x86)\OpenOffice4\program

这一步你可以看你的OpenOffice安装哪里

执行

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

2.查看是否安装成功

2.1查看端口对应的pid

netstat -ano|findstr "8100"

2.2查看pid对应的服务程序名

tasklist|findstr "ipd值"

效果图示:

源码地址:

http://down.51cto.com/data/1980608

有问题留言,来找我吧!

  • 本文来自:Linux学习教程网


你可能感兴趣的:(import,package,文件夹,在线,百度文档)