1、Java FlexPaper swfTools_仿百度文库文档在线预览系统设计与实现最近在给客户开发文档管理系统时,客户要求上传到管理系统的文档(包括ppt,word,excel,txt)只能预览不允许下载。想到了百度文库和豆丁网,百度文库和豆丁网的在线预览都是利用flash来播放文档的,在网上查阅了大量资料,终于实现了该项功能,现将自己的设计和实现整理如下,自己可以试试。一、如何将文档转成flash支持的swf文件实现在线播放?1.先用openOffice把ppt、word、excel、txt类型的文档转换成pdf2.用swftools将pdf转换成swf,然后利用FlexPaper插件实现
2、在线播放预览。二、具体实现1.安装必备工具组件(1)安装openoffice,openoffice是开源免费的文字处理软件,它可以将office文档转成pdf文件(笔者安装到D:ProgramFiles),openOffice下载地址http:/www.openoffice.org/download/index.html(2)安装完openoffice后必须启动其server,以命令行方式启动openoffice server。进入cmd命令行提示符D:Program FilesOpenOffice.org 3program键入如下命令:soffice -headless -accept=so
3、cket,host=127.0.0.1,port=8100;urp; nofirststartwizard进入windows任务管理器查看有个进程soffice.bin,说明openoffice启动成功!(3)安装swfTools(安装到 D:Program Files)swftools作用是将pdf转换为swf文件以便flexpaper播放。下载地址:http:/www.swftools.org/download.html(4)下载flexpaper,下载地址:笔者下载的是FlexPaper_1.5.1,下载后将其解压备用。(5)下载OpenDocument文档转换器 JODConverte
4、r,JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用OpenOffice来进行转换工作,它能进行以下的转换工作:a.Microsoft Office格式转换为OpenDucument,以及OpenDucument转换为Microsoft Officeb.OpenDucument转换为PDF,Word、Excel、PowerPoint转换为PDF,RTF转换为PDF等。下载地址:我们后面开发主要用它的jodconverter-2.2.2.jar包2.软件开发过程(1)启动Eclipse,新建web项目名称为ctcesims(2)将上面
5、第4步解压的flexpaper文件中的js文件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js文件主要是预览swf文件的插件)拷贝至网站根目录;将FlexPaperViewer.swf拷贝至网站根目录下(该文件主要是用在网页中播放swf文件的播放器),目录结构如下图(3)创建documentUpload.jsp文件htmlview plaincopy1. 3. 4. 5. 6. 7. 文档在线预览系统8. 9. bodymargin-top:100px;background:#fff;font-family:Ver
6、dana,Tahoma;10. acolor:#CE4614;11. #msg-boxcolor:#CE4614;font-size:0.9em;text-align:center;12. #msg-box.logoborder-bottom:5pxsolid#ECE5D9;margin-bottom:20px;padding-bottom:10px;13. #msg-box.titlefont-size:1.4em;font-weight:bold;margin:0030px0;14. #msg-box.navmargin-top:20px;15. 16. 17. 18. 19. 20. 2
7、1. 22. 请上传要处理的文件,过程可能需要几分钟,请稍候片刻。23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. (4)创建文档转换类DocConverter.javajavaview plaincopy1. packagecom.cectsims.util;2. importjava.io.BufferedInputStream;3. importjava.io.File;4. importjava.io.IOException;5. importjava.io.InputStream;6. 7. importcom.artofsolving.jodc
8、onverter.DocumentConverter;8. importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;9. importcom.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;10. importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;11. 12. /*13.
9、*docdocx格式转换14. */15. publicclassDocConverter16. privatestaticfinalintenvironment=1;/环境1:windows2:linux17. privateStringfileString;/(只涉及pdf2swf路径问题)18. privateStringoutputPath=;/输入路径,如果不设置就输出在默认的位置19. privateStringfileName;20. privateFilepdfFile;21. privateFileswfFile;22. privateFiledocFile;23. 24.
10、publicDocConverter(StringfileString)25. ini(fileString);26. 27. 28. /*29. *重新设置file30. *31. *paramfileString32. */33. publicvoidsetFile(StringfileString)34. ini(fileString);35. 36. 37. /*38. *初始化39. *40. *paramfileString41. */42. privatevoidini(StringfileString)43. this.fileString=fileString;44. fil
11、eName=fileString.substring(0,fileString.lastIndexOf(.);45. docFile=newFile(fileString);46. pdfFile=newFile(fileName+.pdf);47. swfFile=newFile(fileName+.swf);48. 49. 50. /*51. *转为PDF52. *53. *paramfile54. */55. privatevoiddoc2pdf()throwsException56. if(docFile.exists()57. if(!pdfFile.exists()58. Open
12、OfficeConnectionconnection=newSocketOpenOfficeConnection(8100);59. try60. connection.connect();61. DocumentConverterconverter=newOpenOfficeDocumentConverter(connection);62. converter.convert(docFile,pdfFile);63. /closetheconnection64. connection.disconnect();65. System.out.println(*pdf转换成功,PDF输出:+pd
13、fFile.getPath()+*);66. catch(.ConnectExceptione)67. e.printStackTrace();68. System.out.println(*swf转换器异常,openoffice服务未启动!*);69. throwe;70. catch(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeExceptione)71. e.printStackTrace();72. System.out.println(*swf转换器异常,读取转换文件失败*);73. throwe;74.
14、 catch(Exceptione)75. e.printStackTrace();76. throwe;77. 78. else79. System.out.println(*已经转换为pdf,不需要再进行转化*);80. 81. else82. System.out.println(*swf转换器异常,需要转换的文档不存在,无法转换*);83. 84. 85. 86. /*87. *转换成swf88. */89. SuppressWarnings(unused)90. privatevoidpdf2swf()throwsException91. Runtimer=Runtime.getRu
15、ntime();92. if(!swfFile.exists()93. if(pdfFile.exists()94. if(environment=1)/windows环境处理95. try96. Processp=r.exec(D:/ProgramFiles/SWFTools/pdf2swf.exe+pdfFile.getPath()+-o+swfFile.getPath()+-T9);97. System.out.print(loadStream(p.getInputStream();98. System.err.print(loadStream(p.getErrorStream();99
16、. System.out.print(loadStream(p.getInputStream();100. System.err.println(*swf转换成功,文件输出:101. +swfFile.getPath()+*);102. if(pdfFile.exists()103. pdfFile.delete();104. 105. 106. catch(IOExceptione)107. e.printStackTrace();108. throwe;109. 110. elseif(environment=2)/linux环境处理111. try112. Processp=r.exec
17、(pdf2swf+pdfFile.getPath()113. +-o+swfFile.getPath()+-T9);114. System.out.print(loadStream(p.getInputStream();115. System.err.print(loadStream(p.getErrorStream();116. System.err.println(*swf转换成功,文件输出:117. +swfFile.getPath()+*);118. if(pdfFile.exists()119. pdfFile.delete();120. 121. catch(Exceptione)
18、122. e.printStackTrace();123. throwe;124. 125. 126. else127. System.out.println(*pdf不存在,无法转换*);128. 129. else130. System.out.println(*swf已经存在不需要转换*);131. 132. 133. 134. staticStringloadStream(InputStreamin)throwsIOException135. 136. intptr=0;137. in=newBufferedInputStream(in);138. StringBufferbuffer
19、=newStringBuffer();139. 140. while(ptr=in.read()!=-1)141. buffer.append(char)ptr);142. 143. 144. returnbuffer.toString();145. 146. /*147. *转换主方法148. */149. SuppressWarnings(unused)150. publicbooleanconver()151. 152. if(swfFile.exists()153. System.out.println(*swf转换器开始工作,该文件已经转换为swf*);154. returntrue
20、;155. 156. 157. if(environment=1)158. System.out.println(*swf转换器开始工作,当前设置运行环境windows*);159. else160. System.out.println(*swf转换器开始工作,当前设置运行环境linux*);161. 162. try163. doc2pdf();164. pdf2swf();165. catch(Exceptione)166. e.printStackTrace();167. returnfalse;168. 169. 170. if(swfFile.exists()171. return
21、true;172. else173. returnfalse;174. 175. 176. 177. /*178. *返回文件路径179. *180. *params181. */182. publicStringgetswfPath()183. if(swfFile.exists()184. StringtempString=swfFile.getPath();185. tempString=tempString.replaceAll(,/);186. returntempString;187. else188. return;189. 190. 191. 192. /*193. *设置输出
22、路径194. */195. publicvoidsetOutputPath(StringoutputPath)196. this.outputPath=outputPath;197. if(!outputPath.equals()198. StringrealName=fileName.substring(fileName.lastIndexOf(/),199. fileName.lastIndexOf(.);200. if(outputPath.charAt(outputPath.length()=/)201. swfFile=newFile(outputPath+realName+.swf
23、);202. else203. swfFile=newFile(outputPath+realName+.swf);204. 205. 206. 207. 208. (5)创建文档上传转换处理文件docUploadConvertAction.jsp文件htmlview plaincopy1. 3. 4. 5. 6. 7. 8. 9. %10. /文件上传采用cos组件上传,可更换为commons-fileupload上传,文件上传后,保存在upload文件夹11. /获取文件上传路径12. StringsaveDirectory=application.getRealPath(/)+uploa
24、d;13. /打印上传路径信息14. System.out.println(saveDirectory);15. /每个文件最大50m16. intmaxPostSize=50*1024*1024;17. /采用cos缺省的命名策略,重名后加1,2,3.如果不加dfp重名将覆盖18. DefaultFileRenamePolicydfp=newDefaultFileRenamePolicy();19. /response的编码为UTF-8,同时采用缺省的文件名冲突解决策略,实现上传,如果不加dfp重名将覆盖20. MultipartRequestmulti=newMultipartReques
25、t(request,saveDirectory,maxPostSize,UTF-8,dfp);21. /MultipartRequestmulti=newMultipartRequest(request,saveDirectory,maxPostSize,UTF-8);22. /输出反馈信息23. Enumerationfiles=multi.getFileNames();24. while(files.hasMoreElements()25. System.err.println(ccc);26. Stringname=(String)files.nextElement();27. File
26、f=multi.getFile(name);28. if(f!=null)29. StringfileName=multi.getFilesystemName(name);30. /获取上传文件的扩展名31. StringextName=fileName.substring(fileName.lastIndexOf(.)+1);32. /文件全路径33. StringlastFileName=saveDirectory+fileName;34. /获取需要转换的文件名,将路径名中的替换为/35. Stringconverfilename=saveDirectory.replaceAll(,/)
27、+/+fileName;36. System.out.println(converfilename);37. /调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法38. DocConverterd=newDocConverter(converfilename);39. /调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf;40. d.conver();41. /调用getswfPath()方法,打印转换后的swf文件路径42. System.out.println(d.getswfPath(
28、);43. /生成swf相对路径,以便传递给flexpaper播放器44. Stringswfpath=upload+d.getswfPath().substring(d.getswfPath().lastIndexOf(/);45. System.out.println(swfpath);46. /将相对路径放入sessio中保存47. session.setAttribute(swfpath,swfpath);48. out.println(上传的文件:+lastFileName);49. out.println(文件类型+extName);50. out.println();51. 52
29、. 53. 54. %55. 56. 57. 58. 59. Inserttitlehere60. 61. bodymargin-top:100px;background:#fff;font-family:Verdana,Tahoma;62. acolor:#CE4614;63. #msg-boxcolor:#CE4614;font-size:0.9em;text-align:center;64. #msg-box.logoborder-bottom:5pxsolid#ECE5D9;margin-bottom:20px;padding-bottom:10px;65. #msg-box.titlefont-size:1.4em;font-weight:bold;margin:0030px0;66. #msg-box.navmargin-top:20px;67. 68. 69. 70. 71. 72. 73. 74. 75. 76. (6)创建文档预览文件documentView.jsphtmlview plaincopy1. 3.
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100