天天看點

Java模拟實作百度文檔線上浏覽

這個思路是我參考網上而來,代碼是我實作。

采用Apache下面的OpenOffice将資源檔案轉化為pdf檔案,然後将pdf檔案轉化為swf檔案,用FlexPaper浏覽。

ok,

A、下載下傳OpenOffice (轉換資源檔案)

B、下載下傳JodConverter(調用OpenOffice)

C、下載下傳Swftools(Pdf2Swf)

D、下載下傳 FlexPaper(浏覽swf檔案)

下載下傳之後,先别急安裝,請看完這篇博文

1、先看我們的MyEclipse工程結構

<a href="http://s3.51cto.com/wyfs02/M00/59/4F/wKiom1TPOomBqJi9AAI16KIMH8Y013.jpg" target="_blank"></a>

2、

<a href="http://s3.51cto.com/wyfs02/M00/59/4C/wKioL1TPPA2was0bAAEC_rTHC-k842.jpg" target="_blank"></a>

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

<code>package</code> <code>com.baidu.util;</code>

<code>import</code> <code>java.io.BufferedInputStream;</code>

<code>import</code> <code>java.io.File;</code>

<code>import</code> <code>java.io.FileInputStream;</code>

<code>import</code> <code>java.io.IOException;</code>

<code>import</code> <code>java.io.InputStream;</code>

<code>import</code> <code>java.net.ConnectException;</code>

<code>import</code> <code>javax.imageio.stream.FileImageInputStream;</code>

<code>import</code> <code>javax.servlet.ServletException;</code>

<code>import</code> <code>javax.servlet.http.HttpServlet;</code>

<code>import</code> <code>javax.servlet.http.HttpServletRequest;</code>

<code>import</code> <code>javax.servlet.http.HttpServletResponse;</code>

<code>import</code> <code>com.artofsolving.jodconverter.DocumentConverter;</code>

<code>import</code> <code>com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;</code>

<code>import</code> <code>com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;</code>

<code>import</code> <code>com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;</code>

<code>/**</code>

<code> </code><code>* @Author:NuoYan</code>

<code> </code><code>* @Date:2015-2-2 下午2:24:58 </code>

<code> </code><code>* TODO: 1、第一步,首先擷取到需要檢視的檔案</code>

<code> </code><code>*       2、第二部,将擷取的檔案(doc,xls,txt,ppt,03/07版本轉化為PDF),這一步需要調用OpenOffice</code>

<code> </code><code>*       3、第三部,将資源檔案轉換好的PDF檔案轉換為swf檔案,使用FlexPaperViewer.swf進行浏覽檢視</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>BaiDuServlet </code><code>extends</code> <code>HttpServlet {</code>

<code>    </code><code>private</code> <code>File sourceFile;</code><code>// 要轉化的源檔案</code>

<code>    </code><code>private</code> <code>File pdfFile;</code><code>// pdf中間檔案對象</code>

<code>    </code><code>private</code> <code>File swfFile;</code><code>// swf目标檔案對象</code>

<code>    </code><code>private</code> <code>String filePath;</code><code>// 用來儲存檔案路徑</code>

<code>    </code><code>private</code> <code>String fileName;</code><code>// 不包括字尾名的檔案名</code>

<code>    </code><code>public</code> <code>File getSourceFile() {</code>

<code>        </code><code>return</code> <code>sourceFile;</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>void</code> <code>setSourceFile(File sourceFile) {</code>

<code>        </code><code>this</code><code>.sourceFile = sourceFile;</code>

<code>    </code><code>public</code> <code>File getPdfFile() {</code>

<code>        </code><code>return</code> <code>pdfFile;</code>

<code>    </code><code>public</code> <code>void</code> <code>setPdfFile(File pdfFile) {</code>

<code>        </code><code>this</code><code>.pdfFile = pdfFile;</code>

<code>    </code><code>public</code> <code>File getSwfFile() {</code>

<code>        </code><code>return</code> <code>swfFile;</code>

<code>    </code><code>public</code> <code>void</code> <code>setSwfFile(File swfFile) {</code>

<code>        </code><code>this</code><code>.swfFile = swfFile;</code>

<code>    </code><code>public</code> <code>String getFilePath() {</code>

<code>        </code><code>return</code> <code>filePath;</code>

<code>    </code><code>public</code> <code>void</code> <code>setFilePath(String filePath) {</code>

<code>        </code><code>this</code><code>.filePath = filePath;</code>

<code>    </code><code>public</code> <code>String getFileName() {</code>

<code>        </code><code>return</code> <code>fileName;</code>

<code>    </code><code>public</code> <code>void</code> <code>setFileName(String fileName) {</code>

<code>        </code><code>this</code><code>.fileName = fileName;</code>

<code>    </code><code>public</code> <code>void</code> <code>doGet(HttpServletRequest request, HttpServletResponse response)</code>

<code>            </code><code>throws</code> <code>ServletException, IOException {</code>

<code>        </code><code>String saveFileName = request.getParameter(</code><code>"savFile"</code><code>);</code>

<code>        </code><code>System.out.println(saveFileName);</code>

<code>        </code><code>String webPath = request.getRealPath(</code><code>"/"</code><code>);</code>

<code>        </code><code>filePath = webPath + </code><code>"reader\\"</code> <code>+ saveFileName;</code>

<code>        </code><code>fileName = filePath.substring(</code><code>0</code><code>, filePath.lastIndexOf(</code><code>"."</code><code>));</code>

<code>        </code><code>// 建立三個檔案對象</code>

<code>        </code><code>sourceFile = </code><code>new</code> <code>File(filePath);</code>

<code>        </code><code>pdfFile = </code><code>new</code> <code>File(fileName + </code><code>".pdf"</code><code>);</code>

<code>        </code><code>swfFile = </code><code>new</code> <code>File(fileName + </code><code>".swf"</code><code>);</code>

<code>        </code><code>System.out.println(pdfFile);</code>

<code>        </code><code>System.out.println(swfFile);</code>

<code>        </code><code>// 1、将源檔案轉化為pdf格式檔案</code>

<code>        </code><code>src2pdf();</code>

<code>        </code><code>try</code> <code>{</code>

<code>            </code><code>// 2、将pdf檔案轉化為swf檔案</code>

<code>            </code><code>pdf2swf();</code>

<code>        </code><code>} </code><code>catch</code> <code>(Exception e) {</code>

<code>            </code><code>e.printStackTrace();</code>

<code>        </code><code>}</code>

<code>        </code><code>// 将轉化好的檔案綁定到session上去</code>

<code>        </code><code>request.getSession().setAttribute(</code><code>"swfName"</code><code>, swfFile.getName());</code>

<code>        </code><code>System.out.println(swfFile.getName());</code>

<code>        </code><code>// 重定向到預覽頁面</code>

<code>        </code><code>response.sendRedirect(request.getContextPath() + </code><code>"/reader/baseFile.jsp"</code><code>);</code>

<code>    </code><code>/**</code>

<code>     </code><code>* @Author:NuoYan</code>

<code>     </code><code>* @Date:2015-2-2 下午2:28:22 TODO://源檔案轉化為PDF檔案</code>

<code>     </code><code>*/</code>

<code>    </code><code>private</code> <code>void</code> <code>src2pdf() {</code>

<code>        </code><code>if</code> <code>(sourceFile.exists()) {</code>

<code>            </code><code>// 如果不存在,需要轉份為PDF檔案</code>

<code>            </code><code>if</code> <code>(!pdfFile.exists()) {</code>

<code>                </code><code>// 啟用OpenOffice提供的轉化服務</code>

<code>                </code><code>OpenOfficeConnection conn = </code><code>new</code> <code>SocketOpenOfficeConnection(</code><code>8100</code><code>);</code>

<code>                </code><code>// 連接配接OpenOffice伺服器</code>

<code>                </code><code>try</code> <code>{</code>

<code>                    </code><code>conn.connect();</code>

<code>                    </code><code>// 建立檔案轉換器對象</code>

<code>                    </code><code>DocumentConverter converter = </code><code>new</code> <code>OpenOfficeDocumentConverter(</code>

<code>                            </code><code>conn);</code>

<code>                    </code><code>converter.convert(sourceFile, pdfFile);</code>

<code>                    </code><code>// 斷開連結</code>

<code>                    </code><code>conn.disconnect();</code>

<code>                    </code><code>System.out.println(</code><code>"轉換成功"</code><code>);</code>

<code>                </code><code>} </code><code>catch</code> <code>(ConnectException e) {</code>

<code>                    </code><code>e.printStackTrace();</code>

<code>                </code><code>}</code>

<code>            </code><code>} </code><code>else</code> <code>{</code>

<code>                </code><code>System.out.println(</code><code>"已經存在PDF檔案,不需要在轉換!!"</code><code>);</code>

<code>            </code><code>}</code>

<code>        </code><code>} </code><code>else</code> <code>{</code>

<code>            </code><code>System.out.println(</code><code>"檔案路徑不存在!!!"</code><code>);</code>

<code>     </code><code>* @Date:2015-2-2 下午2:28:32</code>

<code>     </code><code>* @throws Exception</code>

<code>     </code><code>* TODO:PDF轉化為SWF檔案</code>

<code>    </code><code>private</code> <code>void</code> <code>pdf2swf() </code><code>throws</code> <code>Exception {</code>

<code>        </code><code>if</code> <code>(!swfFile.exists()) {</code>

<code>            </code><code>if</code> <code>(pdfFile.exists()) {</code>

<code>                </code><code>String command = </code><code>"C:\\Pdf2swf\\pdf2swf.exe "</code>

<code>                        </code><code>+ pdfFile.getPath() + </code><code>" -o "</code> <code>+ swfFile.getPath()</code>

<code>                        </code><code>+ </code><code>" -T 9"</code><code>;</code>

<code>                </code><code>System.out.println(</code><code>"轉換指令:"</code> <code>+ command);</code>

<code>                </code><code>// Java調用外部指令,執行pdf轉化為swf</code>

<code>                </code><code>Runtime r = Runtime.getRuntime();</code>

<code>                </code><code>Process p = r.exec(command);</code>

<code>                </code><code>System.out.println(loadStream(p.getInputStream()));</code>

<code>                </code><code>System.out.println(</code><code>"swf檔案轉份成功!!!"</code><code>);</code>

<code>                </code><code>System.out.println(swfFile.getPath());</code>

<code>                </code><code>System.out.println(</code><code>"不存在PDF檔案"</code><code>);</code>

<code>    </code> 

<code>    </code><code>private</code> <code>static</code> <code>String loadStream(InputStream in) </code><code>throws</code> <code>Exception {</code>

<code>        </code><code>int</code> <code>len = </code><code>0</code><code>;</code>

<code>        </code><code>in = </code><code>new</code> <code>BufferedInputStream(in);</code>

<code>        </code><code>StringBuffer buffer = </code><code>new</code> <code>StringBuffer();</code>

<code>        </code><code>while</code> <code>((len = in.read()) != -</code><code>1</code><code>) {</code>

<code>            </code><code>buffer.append((</code><code>char</code><code>) len);</code>

<code>        </code><code>return</code> <code>buffer.toString();</code>

<code>}</code>

5、修改index.jsp

<code>&lt;%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%&gt;</code>

<code>&lt;!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"&gt;</code>

<code>&lt;</code><code>html</code><code>&gt;</code>

<code>  </code><code>&lt;</code><code>head</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;百度文庫線上預覽&lt;/</code><code>title</code><code>&gt;</code>

<code>   </code><code>&lt;</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"pragma"</code> <code>content</code><code>=</code><code>"no-cache"</code><code>&gt;</code>

<code>   </code><code>&lt;</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"cache-control"</code> <code>content</code><code>=</code><code>"no-cache"</code><code>&gt;</code>

<code>   </code><code>&lt;</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"expires"</code> <code>content</code><code>=</code><code>"0"</code><code>&gt;    </code>

<code>   </code><code>&lt;</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"keywords"</code> <code>content</code><code>=</code><code>"keyword1,keyword2,keyword3"</code><code>&gt;</code>

<code>   </code><code>&lt;</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"description"</code> <code>content</code><code>=</code><code>"This is my page"</code><code>&gt;</code>

<code>  </code><code>&lt;/</code><code>head</code><code>&gt;</code>

<code>  </code><code>&lt;</code><code>body</code><code>&gt;</code>

<code>   </code><code>&lt;</code><code>a</code> <code>href="&lt;%=request.getContextPath()%&gt;/BaiDuServlet?savFile=1234.xls"&gt;線上預覽&lt;/</code><code>a</code><code>&gt;</code>

<code>  </code><code>&lt;/</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

6、編寫baseFile.jsp檔案

<code>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"</code>

<code>    </code><code>pageEncoding="UTF-8"%&gt;</code>

<code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</code>

<code>&lt;</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"Content-Type"</code> <code>content</code><code>=</code><code>"text/html; charset=UTF-8"</code><code>&gt;</code>

<code>&lt;</code><code>title</code><code>&gt;線上閱讀&lt;/</code><code>title</code><code>&gt;</code>

<code>&lt;</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code> <code>src</code><code>=</code><code>"../FlexPaper/js/flexpaper_flash.js"</code><code>&gt;&lt;/</code><code>script</code><code>&gt;</code>

<code>&lt;</code><code>style</code> <code>type</code><code>=</code><code>"text/css"</code><code>&gt;</code>

<code>html,body{height: 100%;}</code>

<code>body {</code>

<code>    </code><code>margin: 0;padding: 0;overflow: auto;</code>

<code>#flashContent { display:none; }</code>

<code>&lt;/</code><code>style</code><code>&gt;</code>

<code>&lt;/</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>body</code><code>&gt;</code>

<code>&lt;</code><code>div</code> <code>style</code><code>=</code><code>"position:absolute;left:10px;top:10px;"</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>a</code> <code>id</code><code>=</code><code>"viewerPlaceHolder"</code> <code>style</code><code>=</code><code>"width:1000px;height:480px;display:block"</code><code>&gt;&lt;/</code><code>a</code><code>&gt;</code>

<code>            </code><code>&lt;</code><code>script</code> <code>type</code><code>=</code><code>"text/javascript"</code><code>&gt; </code>

<code>                </code><code>var fp = new FlexPaperViewer(  </code>

<code>                         </code><code>'../FlexPaper/FlexPaperViewer',</code>

<code>                         </code><code>'viewerPlaceHolder', { config : {</code>

<code>                         </code><code>SwfFile : escape('../reader/&lt;%=(String)session.getAttribute("swfName")%&gt;'),</code>

<code>                         </code><code>Scale : 0.6, </code>

<code>                         </code><code>ZoomTransition : 'easeOut',</code>

<code>                         </code><code>ZoomTime : 0.5,</code>

<code>                         </code><code>ZoomInterval : 0.2,</code>

<code>                         </code><code>FitPageOnLoad : true,</code>

<code>                         </code><code>FitWidthOnLoad : false,</code>

<code>                         </code><code>FullScreenAsMaxWindow : false,</code>

<code>                         </code><code>ProgressiveLoading : false,</code>

<code>                         </code><code>MinZoomSize : 0.2,</code>

<code>                         </code><code>MaxZoomSize : 5,</code>

<code>                         </code><code>SearchMatchAll : false,</code>

<code>                         </code><code>InitViewMode : 'Portrait',</code>

<code>                         </code><code>PrintPaperAsBitmap : false,</code>

<code>                         </code> 

<code>                         </code><code>ViewModeToolsVisible : true,</code>

<code>                         </code><code>ZoomToolsVisible : true,</code>

<code>                         </code><code>NavToolsVisible : true,</code>

<code>                         </code><code>CursorToolsVisible : true,</code>

<code>                         </code><code>SearchToolsVisible : true,</code>

<code>                          </code> 

<code>                           </code><code>localeChain: 'zh_CN'</code>

<code>                         </code><code>}});</code>

<code>            </code><code>&lt;/</code><code>script</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>div</code><code>&gt;</code>

<code>&lt;/</code><code>body</code><code>&gt;</code>

注意baseFile.jsp中的代碼,不會你可以參考這裡

<a href="http://s3.51cto.com/wyfs02/M02/59/4F/wKiom1TPPH6w-eXHAADBd6XYdeo117.jpg" target="_blank"></a>

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

7、到這裡就完成,需要注意的是:

<a href="http://s3.51cto.com/wyfs02/M00/59/4C/wKioL1TPPdeTPZf0AAAk56wHaeA554.jpg" target="_blank"></a>

    2.1、紅色1标記路徑不能錯,我就犯這個錯誤了        

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

效果圖示:

<a href="http://s3.51cto.com/wyfs02/M01/59/53/wKiom1TQKE7xDqSxAAPNwcLtPA4361.jpg" target="_blank"></a>

源碼位址:

<a href="http://down.51cto.com/data/1980608" target="_blank">http://down.51cto.com/data/1980608</a>

本文轉自 小夜的傳說 51CTO部落格,原文連結:http://blog.51cto.com/1936625305/1610836,如需轉載請自行聯系原作者