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工程结构

wKiom1TPOomBqJi9AAI16KIMH8Y013.jpg


2、

将我们下载下来的wKiom1TPOwCAE5YQAAAZW7nJ3Nk933.jpg解压之后将所有的jar文件拷贝到baiduDoclib下面去

wKioL1TPPA2was0bAAEC_rTHC-k842.jpg


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


4、新建BaiDuServlet.java文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ 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文件


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<%@ 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中的代码,不会你可以参考这里


wKiom1TPPH6w-eXHAADBd6XYdeo117.jpg


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


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

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

wKioL1TPPdeTPZf0AAAk56wHaeA554.jpg


2、wKioL1TPPfzR23txAACPHt6wVzY664.jpg

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


效果图示:


wKiom1TQKE7xDqSxAAPNwcLtPA4361.jpg


源码地址:


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










本文转自 小夜的传说 51CTO博客,原文链接:http://blog.51cto.com/1936625305/1610836,如需转载请自行联系原作者
目录
相关文章
|
1天前
|
JavaScript Java 测试技术
基于Java的用户画像的设计与实现(源码+lw+部署文档+讲解等)
基于Java的用户画像的设计与实现(源码+lw+部署文档+讲解等)
28 1
|
1天前
|
Java 关系型数据库 测试技术
Java代码一键生成数据库文档(案例详解)
Screw是一个自动化数据库文档生成工具,能根据数据库表结构快速生成简洁、多格式(HTML、Word、Markdown)的文档,支持MySQL、MariaDB等多数据库。它使用Freemarker模板,允许用户自定义样式。依赖包括HikariCP数据库连接池和对应JDBC驱动。通过在Java代码或Maven插件中配置,可方便生成文档。示例代码展示了如何在测试用例中使用Screw。文档效果依赖于数据库中的表和字段注释。
|
1天前
|
JavaScript Java 测试技术
基于Java的珠宝购物网站系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的珠宝购物网站系统的设计与实现(源码+lw+部署文档+讲解等)
29 0
|
1天前
|
JavaScript Java 测试技术
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的电影评论系统的设计与实现(源码+lw+部署文档+讲解等)
35 0
|
1天前
|
JavaScript Java 测试技术
基于Java的在线日语培训平台的设计与实现(源码+lw+部署文档+讲解等)
基于Java的在线日语培训平台的设计与实现(源码+lw+部署文档+讲解等)
27 0
|
1天前
|
JavaScript Java 测试技术
基于Java的同城蔬菜配送管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的同城蔬菜配送管理系统的设计与实现(源码+lw+部署文档+讲解等)
16 0
|
1天前
|
JavaScript Java 测试技术
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
32 0
基于Java的心理预约咨询管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
1天前
|
JavaScript Java 测试技术
基于Java的企业员工岗前培训管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的企业员工岗前培训管理系统的设计与实现(源码+lw+部署文档+讲解等)
27 1
基于Java的企业员工岗前培训管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
1天前
|
JavaScript Java 测试技术
基于Java的电竞交互管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的电竞交互管理系统的设计与实现(源码+lw+部署文档+讲解等)
26 0
基于Java的电竞交互管理系统的设计与实现(源码+lw+部署文档+讲解等)
|
1天前
|
JavaScript Java 测试技术
基于Java的税务门户网站的设计与实现(源码+lw+部署文档+讲解等)
基于Java的税务门户网站的设计与实现(源码+lw+部署文档+讲解等)
6 0