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文件

  1. package com.baidu.util;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.net.ConnectException;
  9.  
  10. import javax.imageio.stream.FileImageInputStream;
  11. import javax.servlet.ServletException;
  12. import javax.servlet.http.HttpServlet;
  13. import javax.servlet.http.HttpServletRequest;
  14. import javax.servlet.http.HttpServletResponse;
  15.  
  16. import com.artofsolving.jodconverter.DocumentConverter;
  17. import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
  18. import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
  19. import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
  20.  
  21. /**
  22. * @Author:NuoYan
  23. * @Date:2015-2-2 下午2:24:58
  24. * TODO: 1、第一步,首先获取到需要查看的文件
  25. * 2、第二部,将获取的文件(doc,xls,txt,ppt,03/07版本转化为PDF),这一步需要调用OpenOffice
  26. * 3、第三部,将资源文件转换好的PDF文件转换为swf文件,使用FlexPaperViewer.swf进行浏览查看
  27. */
  28. public class BaiDuServlet extends HttpServlet {
  29. private File sourceFile;// 要转化的源文件
  30. private File pdfFile;// pdf中间文件对象
  31. private File swfFile;// swf目标文件对象
  32. private String filePath;// 用来保存文件路径
  33. private String fileName;// 不包括后缀名的文件名
  34.  
  35. public File getSourceFile() {
  36. return sourceFile;
  37. }
  38.  
  39. public void setSourceFile(File sourceFile) {
  40. this.sourceFile = sourceFile;
  41. }
  42.  
  43. public File getPdfFile() {
  44. return pdfFile;
  45. }
  46.  
  47. public void setPdfFile(File pdfFile) {
  48. this.pdfFile = pdfFile;
  49. }
  50.  
  51. public File getSwfFile() {
  52. return swfFile;
  53. }
  54.  
  55. public void setSwfFile(File swfFile) {
  56. this.swfFile = swfFile;
  57. }
  58.  
  59. public String getFilePath() {
  60. return filePath;
  61. }
  62.  
  63. public void setFilePath(String filePath) {
  64. this.filePath = filePath;
  65. }
  66.  
  67. public String getFileName() {
  68. return fileName;
  69. }
  70.  
  71. public void setFileName(String fileName) {
  72. this.fileName = fileName;
  73. }
  74.  
  75. public void doGet(HttpServletRequest request, HttpServletResponse response)
  76. throws ServletException, IOException {
  77. String saveFileName = request.getParameter("savFile");
  78. System.out.println(saveFileName);
  79. String webPath = request.getRealPath("/");
  80. filePath = webPath + "reader\\" + saveFileName;
  81. fileName = filePath.substring(0, filePath.lastIndexOf("."));
  82. // 创建三个文件对象
  83. sourceFile = new File(filePath);
  84. pdfFile = new File(fileName + ".pdf");
  85. swfFile = new File(fileName + ".swf");
  86. System.out.println(pdfFile);
  87. System.out.println(swfFile);
  88. // 1、将源文件转化为pdf格式文件
  89. src2pdf();
  90. try {
  91. // 2、将pdf文件转化为swf文件
  92. pdf2swf();
  93. } catch (Exception e) {
  94. e.printStackTrace();
  95. }
  96. // 将转化好的文件绑定到session上去
  97. request.getSession().setAttribute("swfName", swfFile.getName());
  98. System.out.println(swfFile.getName());
  99. // 重定向到预览页面
  100. response.sendRedirect(request.getContextPath() + "/reader/baseFile.jsp");
  101. }
  102.  
  103. /**
  104. * @Author:NuoYan
  105. * @Date:2015-2-2 下午2:28:22 TODO://源文件转化为PDF文件
  106. */
  107. private void src2pdf() {
  108. if (sourceFile.exists()) {
  109. // 如果不存在,需要转份为PDF文件
  110. if (!pdfFile.exists()) {
  111. // 启用OpenOffice提供的转化服务
  112. OpenOfficeConnection conn = new SocketOpenOfficeConnection(8100);
  113. // 连接OpenOffice服务器
  114. try {
  115. conn.connect();
  116. // 建立文件转换器对象
  117. DocumentConverter converter = new OpenOfficeDocumentConverter(
  118. conn);
  119. converter.convert(sourceFile, pdfFile);
  120. // 断开链接
  121. conn.disconnect();
  122. System.out.println("转换成功");
  123. } catch (ConnectException e) {
  124. e.printStackTrace();
  125. }
  126. } else {
  127. System.out.println("已经存在PDF文件,不需要在转换!!");
  128. }
  129. } else {
  130. System.out.println("文件路径不存在!!!");
  131. }
  132.  
  133. }
  134.  
  135. /**
  136. * @Author:NuoYan
  137. * @Date:2015-2-2 下午2:28:32
  138. * @throws Exception
  139. * TODO:PDF转化为SWF文件
  140. */
  141. private void pdf2swf() throws Exception {
  142. if (!swfFile.exists()) {
  143. if (pdfFile.exists()) {
  144. String command = "C:\\Pdf2swf\\pdf2swf.exe "
  145. + pdfFile.getPath() + " -o " + swfFile.getPath()
  146. + " -T 9";
  147. System.out.println("转换命令:" + command);
  148. // Java调用外部命令,执行pdf转化为swf
  149. Runtime r = Runtime.getRuntime();
  150. Process p = r.exec(command);
  151. System.out.println(loadStream(p.getInputStream()));
  152. System.out.println("swf文件转份成功!!!");
  153. System.out.println(swfFile.getPath());
  154. } else {
  155. System.out.println("不存在PDF文件");
  156. }
  157. }
  158.  
  159. }
  160.  
  161. private static String loadStream(InputStream in) throws Exception {
  162. int len = 0;
  163. in = new BufferedInputStream(in);
  164. StringBuffer buffer = new StringBuffer();
  165. while ((len = in.read()) != -1) {
  166. buffer.append((char) len);
  167. }
  168. return buffer.toString();
  169. }
  170.  
  171. }

5、 修改index.jsp

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

6、 编写baseFile.jsp文件

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>在线阅读</title>
  8. <script type="text/javascript" src="../FlexPaper/js/flexpaper_flash.js"></script>
  9. <style type="text/css">
  10. html,body{height: 100%;}
  11. body {
  12. margin: 0;padding: 0;overflow: auto;
  13. }
  14. #flashContent { display:none; }
  15. </style>
  16. </head>
  17. <body>
  18. <div style="position:absolute;left:10px;top:10px;">
  19. <a id="viewerPlaceHolder" style="width:1000px;height:480px;display:block"></a>
  20. <script type="text/javascript">
  21. var fp = new FlexPaperViewer(
  22. '../FlexPaper/FlexPaperViewer',
  23. 'viewerPlaceHolder', { config : {
  24. SwfFile : escape('../reader/<%=(String)session.getAttribute("swfName")%>'),
  25. Scale : 0.6,
  26. ZoomTransition : 'easeOut',
  27. ZoomTime : 0.5,
  28. ZoomInterval : 0.2,
  29. FitPageOnLoad : true,
  30. FitWidthOnLoad : false,
  31. FullScreenAsMaxWindow : false,
  32. ProgressiveLoading : false,
  33. MinZoomSize : 0.2,
  34. MaxZoomSize : 5,
  35. SearchMatchAll : false,
  36. InitViewMode : 'Portrait',
  37. PrintPaperAsBitmap : false,
  38. ViewModeToolsVisible : true,
  39. ZoomToolsVisible : true,
  40. NavToolsVisible : true,
  41. CursorToolsVisible : true,
  42. SearchToolsVisible : true,
  43. localeChain: 'zh_CN'
  44. }});
  45. </script>
  46. </div>
  47. </body>
  48. </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

有问题留言,来找我吧!

Java模拟实现百度文档在线浏览的更多相关文章

  1. sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法

    昨晚配置完成office web apps 2013的外部网络访问之后,今天发现了一个很奇怪的问题,就是IE 11不支持文档在线浏览,找了很多方法,打补丁什么的,都不管用,最后在预览文件的页面,看到& ...

  2. FlexPaper实现文档在线浏览(附源码)

    园子里也有关于FlexPaper的文章,但都不怎么详细. 没有较全的参数说明.就连官方网站都没有.没法,最后只得将swf文件反编译后查看了源码才将里面的参数全部弄出来. 好了,废话不多说,开始正题. ...

  3. Linux下实现文档在线浏览

    使用php实现百度文库功能,网上搜索到的方案,实现doc转pdf,pdf转swf,然后显示出来. 这里简单的记录下,[doc转pdf,pdf转swf]两个功能的搭建流程. doc转pdf 使用到下列程 ...

  4. Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现

    笔者最近在给客户开发文档管理系统时,客户要求上传到管理系统的文档(包括ppt,word,excel,txt)只能预览不允许下载.笔者想到了百度文库和豆丁网,百度文库和豆丁网的在线预览都是利用flash ...

  5. Java版office文档在线预览

    java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux ...

  6. Java+FlexPaper+swfTools 文档在线预览demo

    1.概述 主要原理 1.通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件 2.通过swfTools将pdf文件转换成swf格式的文件 3.通过FlexP ...

  7. Java实现word文档在线预览,读取office文件

    想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览. 一.使用openof ...

  8. java 实现word文档在线预览

    一.准备工具 1.通过第三方工具openoffice,将word.excel.ppt.txt等文件转换为pdf文件 下载地址:http://www.openoffice.org/download/in ...

  9. Print2flash在.NET(C#)64位中的使用,即文档在线预览

    转:http://www.cnblogs.com/flowwind/p/3411106.html Print2flash在.NET(C#)中的使用,即文档在线预览   office文档(word,ex ...

随机推荐

  1. Task扩展方法取消操作

    /// <summary> /// 任务扩展,传入取消操作 /// </summary> public static class TaskExtensionDemo { //因 ...

  2. Maven Pom.xml文件简单介绍

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  3. 下载安装mysql-connector

    执行命令:python -m pip install mysql-connector 测试

  4. 小程序swiper组件的bindchange方法重复执行问题

    这是官方文档的说法给出了swiper组件一直来回滑动的bug原因 以下是修正方法 <swiper autoplay="{{autoplay}}" interval=" ...

  5. Python模拟浏览器多窗口切换

    # 模拟浏览器多窗口切换 # 代码中引入selenium版本为:3.4.3 # 通过Chrom浏览器访问发起请求 # Chrom版本:59 ,chromdriver:2.3 # 需要对应版本的Chro ...

  6. TensorFlow - 深度学习破解验证码 实验

    TensorFlow - 深度学习破解验证码 简介:验证码主要用于防刷,传统的验证码识别算法一般需要把验证码分割为单个字符,然后逐个识别,如果字符之间相互重叠,传统的算法就然并卵了,本文采用cnn对验 ...

  7. mysql router使用配置

    mysql router使用配置 参考资料: https://www.jianshu.com/p/7fc8d77bea59 一.架构图 介绍: MySQL Router是处于应用client和dbse ...

  8. noi.ac NOI挑战营模拟赛1-5

    注:因为博主是个每次考试都爆零垫底的菜鸡,所以此篇博客很有可能咕咕咕 (指只贴AC代码不写题解的......如果我真的不会做的话,就不能怪我了qwqwq) Day1 T1 swap 23pts 从一个 ...

  9. 关于vue-resource 跨域请求的异常处理方法

    当你启动一个vue项目时,项目会运行在一个webpack的服务上,所以此时去访问其他端口或者是其他地址时,属于跨域请求,故会报异常. has been blocked by CORS policy: ...

  10. JSTL的forEach标签中的属性具体含义

    JSTL的forEach标签在JSP页面经常替代Java脚本的循环语句,生成多个记录的信息.一般只需 一个一个的展示记录即可,有些需要获取当前记录的索引.在需要获取当前记录的索引的时候可能 有点麻烦, ...