做毕业设计的时候设及到类似“百度文库”的功能模块,在网上搜半天这个办法是最全,最易学的。在此站在巨人的肩膀上详细的介绍一下。
主体思路:先把word文档转通过OpenOffic换成pdf,再把pdf文件通过Swftools转换成swf文件,最后用Flexpaper显示swf文件.
第一步:
1.下载工具OpenOffice、jodconvert-2.2.2.zip、Swftools(pdf2swf)、FlexPaper
2.安装OpenOffice,本人的安装路径为:C:\Program Files\OpenOffice.org 3
3.安装Swftools(pdf2swf),本人的安装路径为:D:\Program Files\SWFTools
第二步
1. 将jodconvert-2.2.2.zip解压,把lib中的jar文件放到项目WEB-INF/lib中
2.在WebRoot下新建flexpaper文件夹,然后把FlexPaper_1.4.5flash.zip解压后的内容放到该文件夹中。
3.开启OpenOffice服务,在dos环境中
cd C:\Program Files\OpenOffice.org 3\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizar
也可以在项目中开启:
String OpenOffice_HOME = "D:/Program Files/OpenOffice.org 3"; // 这里是OpenOffice的安装目录,
// 假如从文件中读取的URL地址最后一个字符不是 '\',则添加'\'
if(OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '/') {
OpenOffice_HOME +="/";
}
Process pro = null;
// 启动OpenOffice的服务
String command =OpenOffice_HOME + "program/soffice.exe -headless-accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
try {
pro =Runtime.getRuntime().exec(command);
} catch (IOException e1) {
// TODOAuto-generated catch block
e1.printStackTrace();
}
4. 利用Jodconverter编写转换类
OpenOfficeConnection connection=new SocketOpenOfficeConnection(8100);
try{
connection.connect();
DocumentConverter converter=new OpenOfficeDocumentConverter(connection);
if(sourceFile.exists()){//如果源文件存在
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服务未启动");
return "failed";
}catch(com.artofsolving.jodconverter.openoffice.connection.OpenOfficeExceptione)
{
e.printStackTrace();
System.out.println("读取文件失败");
return "failed";
}catch(Exception e){
e.printStackTrace();
System.out.println("读取文件失败");
return "failed";
}finally{
if(connection!=null){
connection.disconnect();
connection=null;
}
}
}
5.从Pdf到swf
Runtime r=Runtime.getRuntime();
if(pdfFile.exists()){
try{
Process p=r.exec("C:\\ProgramFiles\\SWFTools\\pdf2swf.exe \""+pdfFile.getPath()+"\" -o \""+swfFile.getPath()+"\" -T 9");
System.out.println("pdf2swf.exe开始转换");
swfFile.createNewFile();
System.out.println("---pdf转成swf格式路径---"+swfFile.getPath());
}catch(Exception e){
e.printStackTrace();
return "failed";
}
}else{
System.out.println("----PDF文件不存在,无法转换---------");
}
6.一切转换就绪就差展示了,最后跳转到view页面。在工程下面的WebRoot下的flexpaper下,新建readFile.jsp文件(这边位置随意,只要servlet跳转的时候配置好路径就可以了),代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <%String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title>FlexPaper</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <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="<%=basePath%>flexpaper/js/flexpaper_flash.js"></script> </head> <body> <div style="position:absolute;left:10px;top:10px;"> <input type="hidden" id="swf" value="${swfFileName }"> <a id="viewerPlaceHolder" style="width:1000px;height:500px;display:block"></a> <script type="text/javascript"> var swf = document.getElementById("swf").value; alert(swf); swf='<%=basePath%>courseware/swf/'+swf; var fp = new FlexPaperViewer( '<%=basePath%>flexpaper/FlexPaperViewer', 'viewerPlaceHolder', { config : { SwfFile : escape(swf), Scale : 0.6, ZoomTransition : 'easeOut', ZoomTime : 0.5, ZoomInterval : 0.2, FitPageOnLoad : true, FitWidthOnLoad : false, PrintEnabled : true, FullScreenAsMaxWindow : false, ProgressiveLoading : false, MinZoomSize : 0.2, MaxZoomSize : 5, SearchMatchAll : false, InitViewMode : 'Portrait', ViewModeToolsVisible : true, ZoomToolsVisible : true, NavToolsVisible : true, CursorToolsVisible : true, SearchToolsVisible : true, localeChain: 'en_US' }}); </script> </div> </body> </html>