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

这个思路是我参考网上而来,代码是我实现。
采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper浏览。
ok,
A、下载OpenOffice (转换资源文件)
B、下载JodConverter(调用OpenOffice)
C、下载Swftools(Pdf2Swf)
D、下载 FlexPaper(浏览swf文件)

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

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

2、将我们下载下来的jodconverter-2.2.2.zip解压之后将所有的jar文件拷贝到baiduDoc的lib下面去

3、在WebRoot下面新建FlexPaper文件夹,将解压后的FlexPaper全部拷贝到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)、swftools-2013-04-09-1007.exe文件安装路径不要太深,不然Java调用外部命令不能执行

(2)、

       

    2.1、红色1标记路径不能错,我就犯这个错误了       
    2.2、红色标记2还可以写http://127.0.0.1:8080/baiduDoc/reader/...

(3)、启动OpenOffice的命令,不是直接双击启动的。官网启动方式,使用cd命令打开安装目录!
安装完openoffice后
A.安装服务
cd C:\Program Files (x86)\OpenOffice4\program
这一步你可以看你的OpenOffice安装哪里
执行
soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
B.查看是否安装成功
   2.1查看端口对应的pid
   netstat -ano|findstr "8100"
   2.2查看pid对应的服务程序名
   tasklist|findstr "ipd值"

效果图示:

以上就是本文的全部内容,希望对大家的学习有所帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 在线浏览
百度文档
,以便于您获取更多的相关知识。

时间: 2024-11-02 12:53:40

学习Java模拟实现百度文档在线浏览_java的相关文章

asp.net如何实现像百度文档那种在线查看文档的功能

问题描述 现在项目中需要添加一个上传的word文档在线预览擦查看下载的功能. 解决方案 解决方案二:http://www.17558.net/post/362.htmlhttp://www.jb51.net/article/26266.htmhttp://blog.csdn.net/zhouwen/article/details/5859861解决方案三:Referthis:解决方案四:如何把word文档转换成Swf解决方案五: 解决方案六:楼上几个只晓得发链接..........解决方案七:你

Java中的XML: 文档模型,第一部分:性能

使用内存中 XML 文档的 Java 开发者可以选择使用标准 DOM 表示或几个 Java 特定模型中的任何一个.该灵活性已经帮助将 Java 建立成 XML 工作的出色平台.但是,由于不同模型数量的增加,已经更加难以确定如何比较模型的功能.性能和易用性. 关于使用"Java 中的 XML"系列中的第一篇文章研究了 Java 中一些领先的 XML 文档模型的特性和性能.它包括一组性能测试的结果.在系列中的第二篇文章将通过比较为实现同样任务所使用的不同模型的样本代码来研究易用性问题. 文

lnmp环境下实现word文档在线预览 内容可复制

问题描述 lnmp环境下实现word文档在线预览 内容可复制 lnmp环境下实现word文档在线预览的效果 内容是可以复制的,谢谢大家的帮忙! 解决方案 http://www.oschina.net/p/lnmp/ 解决方案二: apache poi操作office文档----java在线预览txt.word.ppt.execel,pdf代码flexpaper实现文档的在线预览

asp.net批量生成网页,类似百度文档——文档预览的网页

问题描述 我最近在做一个类似百度文档的网站,遇到一个难题,我的数据库里有很多的转换成swf的文档,现在我想根据我的数据库自动生成很多个有文档预览功能的网页,文档预览的功能我已经做好了.生成的网页我想该是动态的,,能显示当前登录的用户名,求各位大神支支招,,, 解决方案 解决方案二:做个母板页或者一个页面动态显示用户信息,将你的预览页放一个iframe里就行了呗解决方案三:http://www.cnblogs.com/qinpeifeng107/archive/2011/08/29/2158879

[转]Office文档在线编辑的实现之二

From:http://www.cnblogs.com/jianyi0115/archive/2007/07/15/818566.html 本篇将讲解如何实现客户端的office直接编辑数据库中的二进制形式保存的office文件. 实现的关键:模拟IIS,自己实现一个webdav的服务器端. 首先,我们简单了解一下webdav: webdav,中文可以翻译为网络分布式协作协议,它解决了http协议中一个问题:http无法实现版本和单访问控制. 什么是单访问控制呢?假设我们有一个页面编辑某条数据,

仔细触摸Java编程中的“文档”和“包”

编程 什么是包 Java中的包(Package)其实指的就是目录,它是为了更好地管理Java类(Class)和接口(Interface).Java语言的包可以被另一个Java开发包所使用.如果我们要引用某个包中的类,用import关键字来标明即可.比如: import java.util. date=new Date  提示:import java.util.表示java.util中的所有公有类和接口被引入到当前包.这里的匹配符可以调入多个类名. 常用的Java标准包 JDK为我

Java程序把Word文档直接转换成HTML文件

word|程序|转换 Jacob是Java和Windows下的Com桥,通过它我们可以在Java程序中调用COM组件.如果你的JDK是1.4,那你需要下载Jacob1.9的jni库才能正常运行,早期版本在JDK1.4下有些问题. package com; /*** 〈p〉Title:Word文档转html类〈/p〉* 〈p〉Description: 〈/p〉* 〈p〉Copyright:() 2002〈/p〉* @author 舵手* @version 1.0*/import com.jacob

百度知道在本月推出了百度文档

摘要: 百度知道在本月推出了百度文档,也就是一个文档分享平台,此类平台之前就有,不过百度因为他的特殊地位以及巨大的流量,推广意义重大.在百度文档可以发布PDF DOC DOCX PPT等格式的 百度知道在本月推出了百度文档,也就是一个文档分享平台,此类平台之前就有,不过百度因为他的特殊地位以及巨大的流量,推广意义重大.在百度文档可以发布PDF DOC DOCX PPT等格式的文档,其中pdf是常见的电子书格式之一,我们可以将自己制作的电子书发布到百度文档,下载量是很可观的.很多人都用过百度贴吧,

java类的问题-JAVA我想用java创建一个txt文档

问题描述 JAVA我想用java创建一个txt文档 我想用java创建一个txt文档,并生成它,在JAVA源程序目录下可以找到.怎么在txt文档中把JTextARea中的内容写入里面.`