java-flexpaper-swftools仿百度文库文档在线预览系统设计与实现.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java flexpaper swftools 百度 文库 文档 在线 预览 系统 设计 实现
- 资源描述:
-
Java FlexPaper swfTools_仿百度文库文档在线预览系统设计与实现 最近在给客户开发文档管理系统时,客户要求上传到管理系统的文档(包括ppt,word,excel,txt)只能预览不允许下载。想到了百度文库和豆丁网,百度文库和豆丁网的在线预览都是利用flash来播放文档的,在网上查阅了大量资料,终于实现了该项功能,现将自己的设计和实现整理如下,自己可以试试。 一、如何将文档转成flash支持的swf文件实现在线播放? 1.先用openOffice把ppt、word、excel、txt类型的文档转换成pdf 2.用swftools将pdf转换成swf,然后利用FlexPaper插件实现在线播放预览。 二、具体实现 1.安装必备工具组件 (1)安装openoffice,openoffice是开源免费的文字处理软件,它可以将office文档转成pdf文件(笔者安装到D:\Program Files),openOffice下载地址http://www.openoffice.org/download/index.html (2)安装完openoffice后必须启动其server,以命令行方式启动openoffice server。进入cmd命令行提示符D:\Program Files\OpenOffice.org 3\program\ 键入如下命令: soffice -headless -accept="socket,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文档转换器 JODConverter,JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用OpenOffice来进行转换工作,它能进行以下的转换工作: a.Microsoft Office格式转换为OpenDucument,以及OpenDucument转换为Microsoft Office b.OpenDucument转换为PDF,Word、Excel、PowerPoint转换为PDF,RTF转换为PDF等。 下载地址: 我们后面开发主要用它的jodconverter-2.2.2.jar包 2.软件开发过程 (1)启动Eclipse,新建web项目名称为ctcesims (2)将上面第4步解压的flexpaper文件中的js文件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js文件主要是预览swf文件的插件)拷贝至网站根目录;将FlexPaperViewer.swf拷贝至网站根目录下(该文件主要是用在网页中播放swf文件的播放器),目录结构如下图 (3)创建documentUpload.jsp文件 [html] view plaincopy 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. <style> 9. body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;} 10. a {color:#CE4614;} 11. #msg-box {color: #CE4614; font-size:0.9em;text-align:center;} 12. #msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;} 13. #msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;} 14. #msg-box .nav {margin-top:20px;} 15. </style> 16. 17. </head> 18. <body> 19. <div id="msg-box"> 20. <form name="form1" method="post" enctype="multipart/form-data" action="docUploadConvertAction.jsp"> 21. <div class="title"> 22. 请上传要处理的文件,过程可能需要几分钟,请稍候片刻。 23. </div> 24. <p> 25. <input name="file1" type="file"> 26. </p> 27. <p> 28. <input type="submit" name="Submit" value="上传"> 29. </p> 30. </form > 31. </div> 32. </body> 33. </html> (4)创建文档转换类DocConverter.java [java] view plaincopy 1. package com.cectsims.util; 2. import java.io.BufferedInputStream; 3. import java.io.File; 4. import java.io.IOException; 5. import java.io.InputStream; 6. 7. import com.artofsolving.jodconverter.DocumentConverter; 8. import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection; 9. import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection; 10. import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter; 11. 12. /** 13. * doc docx格式转换 14. */ 15. public class DocConverter { 16. private static final int environment = 1;// 环境 1:windows 2:linux 17. private String fileString;// (只涉及pdf2swf路径问题) 18. private String outputPath = "";// 输入路径 ,如果不设置就输出在默认的位置 19. private String fileName; 20. private File pdfFile; 21. private File swfFile; 22. private File docFile; 23. 24. public DocConverter(String fileString) { 25. ini(fileString); 26. } 27. 28. /** 29. * 重新设置file 30. * 31. * @param fileString 32. */ 33. public void setFile(String fileString) { 34. ini(fileString); 35. } 36. 37. /** 38. * 初始化 39. * 40. * @param fileString 41. */ 42. private void ini(String fileString) { 43. this.fileString = fileString; 44. fileName = fileString.substring(0, fileString.lastIndexOf(".")); 45. docFile = new File(fileString); 46. pdfFile = new File(fileName + ".pdf"); 47. swfFile = new File(fileName + ".swf"); 48. } 49. 50. /** 51. * 转为PDF 52. * 53. * @param file 54. */ 55. private void doc2pdf() throws Exception { 56. if (docFile.exists()) { 57. if (!pdfFile.exists()) { 58. OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); 59. try { 60. connection.connect(); 61. DocumentConverter converter = new OpenOfficeDocumentConverter(connection); 62. converter.convert(docFile, pdfFile); 63. // close the connection 64. connection.disconnect(); 65. System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath()+ "****"); 66. } catch (.ConnectException e) { 67. e.printStackTrace(); 68. System.out.println("****swf转换器异常,openoffice服务未启动!****"); 69. throw e; 70. } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) { 71. e.printStackTrace(); 72. System.out.println("****swf转换器异常,读取转换文件失败****"); 73. throw e; 74. } catch (Exception e) { 75. e.printStackTrace(); 76. throw e; 77. } 78. } else { 79. System.out.println("****已经转换为pdf,不需要再进行转化****"); 80. } 81. } else { 82. System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****"); 83. } 84. } 85. 86. /** 87. * 转换成 swf 88. */ 89. @SuppressWarnings("unused") 90. private void pdf2swf() throws Exception { 91. Runtime r = Runtime.getRuntime(); 92. if (!swfFile.exists()) { 93. if (pdfFile.exists()) { 94. if (environment == 1) {// windows环境处理 95. try { 96. Process p = r.exec("D:/Program Files/SWFTools/pdf2swf.exe "+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9"); 97. System.out.print(loadStream(p.getInputStream())); 98. System.err.print(loadStream(p.getErrorStream())); 99. 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 (IOException e) { 107. e.printStackTrace(); 108. throw e; 109. } 110. } else if (environment == 2) {// linux环境处理 111. try { 112. Process p = r.exec("pdf2swf " + pdfFile.getPath() 113. + " -o " + swfFile.getPath() + " -T 9"); 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 (Exception e) { 122. e.printStackTrace(); 123. throw e; 124. } 125. } 126. } else { 127. System.out.println("****pdf不存在,无法转换****"); 128. } 129. } else { 130. System.out.println("****swf已经存在不需要转换****"); 131. } 132. } 133. 134. static String loadStream(InputStream in) throws IOException { 135. 136. int ptr = 0; 137. in = new BufferedInputStream(in); 138. StringBuffer buffer = new StringBuffer(); 139. 140. while ((ptr = in.read()) != -1) { 141. buffer.append((char) ptr); 142. } 143. 144. return buffer.toString(); 145. } 146. /** 147. * 转换主方法 148. */ 149. @SuppressWarnings("unused") 150. public boolean conver() { 151. 152. if (swfFile.exists()) { 153. System.out.println("****swf转换器开始工作,该文件已经转换为swf****"); 154. return true; 155. } 156. 157. if (environment == 1) { 158. System.out.println("****swf转换器开始工作,当前设置运行环境windows****"); 159. } else { 160. System.out.println("****swf转换器开始工作,当前设置运行环境linux****"); 161. } 162. try { 163. doc2pdf(); 164. pdf2swf(); 165. } catch (Exception e) { 166. e.printStackTrace(); 167. return false; 168. } 169. 170. if (swfFile.exists()) { 171. return true; 172. } else { 173. return false; 174. } 175. } 176. 177. /** 178. * 返回文件路径 179. * 180. * @param s 181. */ 182. public String getswfPath() { 183. if (swfFile.exists()) { 184. String tempString = swfFile.getPath(); 185. tempString = tempString.replaceAll("\\\\", "/"); 186. return tempString; 187. } else { 188. return ""; 189. } 190. 191. } 192. /** 193. * 设置输出路径 194. */ 195. public void setOutputPath(String outputPath) { 196. this.outputPath = outputPath; 197. if (!outputPath.equals("")) { 198. String realName = fileName.substring(fileName.lastIndexOf("/"), 199. fileName.lastIndexOf(".")); 200. if (outputPath.charAt(outputPath.length()) == '/') { 201. swfFile = new File(outputPath + realName + ".swf"); 202. } else { 203. swfFile = new File(outputPath + realName + ".swf"); 204. } 205. } 206. } 207. 208. } (5)创建文档上传转换处理文件docUploadConvertAction.jsp文件 [html] view plaincopy 1. <%@ page language="java" contentType="text/html; charset=UTF-8" 2. pageEncoding="UTF-8"%> 3. 4. <%@page import="java.io.*"%> 5. <%@page import="java.util.Enumeration"%> 6. <%@page import="com.oreilly.servlet.MultipartRequest"%> 7. <%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%> 8. <%@page import="com.cectsims.util.DocConverter"%> 9. <% 10. //文件上传采用cos组件上传,可更换为commons-fileupload上传,文件上传后,保存在upload文件夹 11. //获取文件上传路径 12. String saveDirectory =application.getRealPath("/")+"upload"; 13. //打印上传路径信息 14. System.out.println(saveDirectory); 15. //每个文件最大50m 16. int maxPostSize = 50 * 1024 * 1024 ; 17. //采用cos缺省的命名策略,重名后加1,2,3...如果不加dfp重名将覆盖 18. DefaultFileRenamePolicy dfp = new DefaultFileRenamePolicy(); 19. //response的编码为"UTF-8",同时采用缺省的文件名冲突解决策略,实现上传,如果不加dfp重名将覆盖 20. MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8",dfp); 21. //MultipartRequest multi = new MultipartRequest(request, saveDirectory, maxPostSize,"UTF-8"); 22. //输出反馈信息 23. Enumeration files = multi.getFileNames(); 24. while (files.hasMoreElements()) { 25. System.err.println("ccc"); 26. String name = (String)files.nextElement(); 27. File f = multi.getFile(name); 28. if(f!=null){ 29. String fileName = multi.getFilesystemName(name); 30. //获取上传文件的扩展名 31. String extName=fileName.substring(fileName.lastIndexOf(".")+1); 32. //文件全路径 33. String lastFileName= saveDirectory+"\\" + fileName; 34. //获取需要转换的文件名,将路径名中的'\'替换为'/' 35. String converfilename = saveDirectory.replaceAll("\\\\", "/")+"/"+fileName; 36. System.out.println(converfilename); 37. //调用转换类DocConverter,并将需要转换的文件传递给该类的构造方法 38. DocConverter d = new DocConverter(converfilename); 39. //调用conver方法开始转换,先执行doc2pdf()将office文件转换为pdf;再执行pdf2swf()将pdf转换为swf; 40. d.conver(); 41. //调用getswfPath()方法,打印转换后的swf文件路径 42. System.out.println(d.getswfPath()); 43. //生成swf相对路径,以便传递给flexpaper播放器 44. String swfpath = "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("<hr>"); 51. } 52. } 53. 54. %> 55. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 56. <html> 57. <head> 58. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 59. <title>Insert title here</title> 60. <style> 61. body {margin-top:100px;background:#fff;font-family: Verdana, Tahoma;} 62. a {color:#CE4614;} 63. #msg-box {color: #CE4614; font-size:0.9em;text-align:center;} 64. #msg-box .logo {border-bottom:5px solid #ECE5D9;margin-bottom:20px;padding-bottom:10px;} 65. #msg-box .title {font-size:1.4em;font-weight:bold;margin:0 0 30px 0;} 66. #msg-box .nav {margin-top:20px;} 67. </style> 68. </head> 69. <body> 70. <div> 71. <form name="viewForm" id="form_swf" action="documnetView.jsp" method="POST"> 72. <input type='submit' value='预览' class='BUTTON SUBMIT'/> 73. </form> 74. </div> 75. </body> 76. </html> (6)创建文档预览文件documentView.jsp [html] view plaincopy 1. <%@ page language="java" contentType="text/html; charset=UTF-8" 2. pageEncoding="UTF-8"%> 3. <展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




java-flexpaper-swftools仿百度文库文档在线预览系统设计与实现.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/2493065.html