Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49218
  • 博文数量: 62
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2015-01-06 11:17
文章分类
文章存档

2015年(62)

我的朋友

分类: LINUX

2015-02-04 15:30:12

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

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

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

ok,

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

B、下载JodConverter(调用OpenOffice)

C、下载Swftools(Pdf2Swf)

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

这里我已经全部下载好了,大家只需要下载: 

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

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"%>  <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"%>  <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还可以写 

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值"

效果图示:

源码地址:

有问题留言,来找我吧!

  • 本文来自:
阅读(273) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~