这个思路是我参考网上而来,代码是我实现。
采用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文件
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
<%@ 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文件
<%@ 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值\"
效果图示:
以上就是本文的全部内容,希望对大家的学习有所帮助。
本文地址:https://www.stayed.cn/item/23178
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我