這個思路是我參考網上而來,代碼是我實現。
采用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文件
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中的代碼,不會你可以參考這里
/**************************************************************************************/
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值"
效果圖示:
以上就是本文的全部內容,希望對大家的學習有所幫助。