OpenOffice http://zh.openoffice.org/new/zh_cn/downloads.html
JodConverter http://dldx.csdn.net/fd.php?i=992314146801277&s=08dbee95a6e2dda1a95aa8cbf4df197b
Swftools(pdf2swf) http://dldx.csdn.net/fd.php?i=389133735472350&s=2f7430ad3c00cca78ada8b4671a50b24
FlexPaper http://flexpaper.googlecode.com/files/FlexPaper_1.4.5_flash.zip
资料方面,大致搜索了百度文库和开源中国上的一些资料,其实都大同小异。前辈们已经为我们做了很多了,再次谢过各位分享的前辈。
另外,在lib下需要加入JodConverter压缩包中lib目录下的jar包,全部复制进去即可。
ConvertServlet的servlet处理类代码如下:
package org.gfg.test.servlet; import java.io.File; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; 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; public class ConvertServlet extends HttpServlet { private File sourceFile; //转换源文件 private File pdfFile; //PDF目标文件 private File swfFile; //SWF目标文件 private Runtime r; public void init() throws ServletException { sourceFile = new File("G:\\tomcat6\\webapps\\readonline\\swfFile\\1.doc"); pdfFile = new File("G:\\tomcat6\\webapps\\readonline\\swfFile\\1.pdf"); swfFile = new File("G:\\tomcat6\\webapps\\readonline\\swfFile\\Paper.swf"); System.out.println("第一步:生成文件对象,准备转换"); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. * * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); //转换成pdf文件 if(sourceFile.exists()) { if(!pdfFile.exists()) { OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); try { connection.connect(); DocumentConverter converter = new OpenOfficeDocumentConverter(connection); converter.convert(sourceFile, pdfFile); pdfFile.createNewFile(); connection.disconnect(); System.out.println("第二步:转换为PDF格式 路径" + pdfFile.getPath()); } catch (java.net.ConnectException e) { e.printStackTrace(); System.out.println("OpenOffice服务未启动"); throw e; } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) { e.printStackTrace(); System.out.println("读取文件失败"); throw e; } catch (Exception e){ e.printStackTrace(); try { throw e; } catch (Exception e1) { e1.printStackTrace(); } } } else { System.out.println("已转换为PDF,无需再次转换"); } } else { System.out.println("要转换的文件不存在"); } //转换成swf文件 r = Runtime.getRuntime(); new Thread(){ @Override public void run() { if(!swfFile.exists()){ if(pdfFile.exists()) { try { System.out.println("E:/SWFTools/pdf2swf.exe " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9"); Process p = r.exec("E:/SWFTools/pdf2swf.exe " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T 9"); p.waitFor(); swfFile.createNewFile(); System.out.println("第三步:转换为SWF格式 路径:" + swfFile.getPath()); System.out.println("第si步:转换为SWF格式mingcheng:" + swfFile.getName()); // if(pdfFile.exists()) { // pdfFile.delete(); // } } catch (Exception e) { e.printStackTrace(); try { throw e; } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } } else { System.out.println("PDF文件不存在,无法转换"); } } else { System.out.println("已经转为SWF文件,无需再次转换"); } } }.start(); HttpSession session = request.getSession(); session.setAttribute("fileName", swfFile.getName()); System.out.println("我是测试:"+session.getAttribute("fileName")); response.sendRedirect(request.getContextPath()+"/readFile.jsp"); } }
Readfile.Jsp显示界面代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>在线阅读</title> <style type="text/css" media="screen"> html, body { height:100%; } body { margin:0; padding:0; overflow:auto; } #flashContent { display:none; } </style> <script type="text/javascript" src="flexpaper/js/flexpaper_flash_debug.js"></script> <script type="text/javascript" src="flexpaper/js/jquery.js"></script> <script type="text/javascript" src="flexpaper/js/flexpaper_flash.js"></script> </head> <body> <div style="position:absolute;left:200px;top:10px;"> <center> <a id="viewerPlaceHolder" style="width:1000px;height:800px;display:block">努力加载中............</a></center> <script type="text/javascript"> $(document).ready(function(){ var fp = new FlexPaperViewer( 'flexpaper/FlexPaperViewer', 'viewerPlaceHolder', { config : { SwfFile : escape('http:\/\/192.168.0.13:8080\/readonline\/swfFile\/<%=request.getAttribute("fileName")%>'), Scale : 0.6, ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, PrintEnabled : true, FullScreenAsMaxWindow : false, ProgressiveLoading : true, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, InitViewMode : 'Portrait', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: 'zh_CN' }}); }); </script> </div> </body> </html>
要特别注意的是:FlexPaperViewer的路径一定要正确,id对上。另外,可以用官方的Paper.swf作为测试,只需要将SwfFile的地址改掉即可。
大致显示效果如下:
除此之外,关于一直加载无法显示的问题和无法打开自有swf文件的问题,据说是adobe的信任问题,还在解决中!测试了一下,好像生成的速度还行,就是貌似有servlet请求超时导致请求中断的情况!反正基本差不多了,就差优化了!就这样吧。