http://blog.csdn.net/core_star/article/details/10148047
1、软件环境:
2、所需组件:
- openoffice:启动openoffice服务:soffice.exe -headless -nologo -norestore -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager
 - swftools
 
- flexpaper : flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js , FlexPaperViewer.swf
 - OpenDocument文档转换器 JODConverter, 主要用它的jodconverter-2.2.2.jar包
 
3、程序源码:
- java转换器的程序代码:
 
- package correy.erp.util.converter;
 - import java.io.BufferedInputStream;
 - import java.io.File;
 - import java.io.IOException;
 - import java.io.InputStream;
 - 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 DocConverter {
 - private static final int environment = 1;// 环境 1:windows 2:linux
 - private String fileString;// (只涉及pdf2swf路径问题)
 - private String outputPath = "";// 输入路径 ,如果不设置就输出在默认的位置
 - private String fileName;
 - private File pdfFile;
 - private File swfFile;
 - private File docFile;
 - public DocConverter(String fileString) {
 - ini(fileString);
 - }
 - /**
 - * 重新设置file
 - *
 - * @param fileString
 - */
 - public void setFile(String fileString) {
 - ini(fileString);
 - }
 - /**
 - * 初始化
 - *
 - * @param fileString
 - */
 - private void ini(String fileString) {
 - this.fileString = fileString;
 - fileName = fileString.substring(0, fileString.lastIndexOf("."));
 - docFile = new File(fileString);
 - pdfFile = new File(fileName + ".pdf");
 - swfFile = new File(fileName + ".swf");
 - }
 - /**
 - * 转为PDF
 - *
 - * @param file
 - */
 - private void doc2pdf() throws Exception {
 - if (docFile.exists()) {
 - if (!pdfFile.exists()) {
 - OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
 - try {
 - connection.connect();
 - DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
 - converter.convert(docFile, pdfFile);
 - // close the connection
 - connection.disconnect();
 - System.out.println("****pdf转换成功,PDF输出:" + pdfFile.getPath()+ "****");
 - } catch (java.net.ConnectException e) {
 - e.printStackTrace();
 - System.out.println("****swf转换器异常,openoffice服务未启动!****");
 - throw e;
 - } catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException e) {
 - e.printStackTrace();
 - System.out.println("****swf转换器异常,读取转换文件失败****");
 - throw e;
 - } catch (Exception e) {
 - e.printStackTrace();
 - throw e;
 - }
 - } else {
 - System.out.println("****已经转换为pdf,不需要再进行转化****");
 - }
 - } else {
 - System.out.println("****swf转换器异常,需要转换的文档不存在,无法转换****");
 - }
 - }
 - /**
 - * 转换成 swf
 - */
 - @SuppressWarnings("unused")
 - private void pdf2swf() throws Exception {
 - Runtime r = Runtime.getRuntime();
 - if (!swfFile.exists()) {
 - if (pdfFile.exists()) {
 - if (environment == 1) {// windows环境处理
 - try {
 - Process p = r.exec("E:/Program Files/SWFTools/pdf2swf.exe "+ pdfFile.getPath() + " -o "+ swfFile.getPath() + " -T 9");
 - System.out.print(loadStream(p.getInputStream()));
 - System.err.print(loadStream(p.getErrorStream()));
 - System.out.print(loadStream(p.getInputStream()));
 - System.err.println("****swf转换成功,文件输出:"
 - + swfFile.getPath() + "****");
 - if (pdfFile.exists()) {
 - pdfFile.delete();
 - }
 - } catch (IOException e) {
 - e.printStackTrace();
 - throw e;
 - }
 - } else if (environment == 2) {// linux环境处理
 - try {
 - Process p = r.exec("pdf2swf " + pdfFile.getPath()
 - + " -o " + swfFile.getPath() + " -T 9");
 - System.out.print(loadStream(p.getInputStream()));
 - System.err.print(loadStream(p.getErrorStream()));
 - System.err.println("****swf转换成功,文件输出:"
 - + swfFile.getPath() + "****");
 - if (pdfFile.exists()) {
 - pdfFile.delete();
 - }
 - } catch (Exception e) {
 - e.printStackTrace();
 - throw e;
 - }
 - }
 - } else {
 - System.out.println("****pdf不存在,无法转换****");
 - }
 - } else {
 - System.out.println("****swf已经存在不需要转换****");
 - }
 - }
 - static String loadStream(InputStream in) throws IOException {
 - int ptr = 0;
 - in = new BufferedInputStream(in);
 - StringBuffer buffer = new StringBuffer();
 - while ((ptr = in.read()) != -1) {
 - buffer.append((char) ptr);
 - }
 - return buffer.toString();
 - }
 - /**
 - * 转换主方法
 - */
 - @SuppressWarnings("unused")
 - public boolean conver() {
 - if (swfFile.exists()) {
 - System.out.println("****swf转换器开始工作,该文件已经转换为swf****");
 - return true;
 - }
 - if (environment == 1) {
 - System.out.println("****swf转换器开始工作,当前设置运行环境windows****");
 - } else {
 - System.out.println("****swf转换器开始工作,当前设置运行环境linux****");
 - }
 - try {
 - doc2pdf();
 - pdf2swf();
 - } catch (Exception e) {
 - e.printStackTrace();
 - return false;
 - }
 - if (swfFile.exists()) {
 - return true;
 - } else {
 - return false;
 - }
 - }
 - /**
 - * 返回文件路径
 - *
 - * @param s
 - */
 - public String getswfPath() {
 - if (swfFile.exists()) {
 - String tempString = swfFile.getPath();
 - tempString = tempString.replaceAll("\\\\", "/");
 - return tempString;
 - } else {
 - return "";
 - }
 - }
 - /**
 - * 设置输出路径
 - */
 - public void setOutputPath(String outputPath) {
 - this.outputPath = outputPath;
 - if (!outputPath.equals("")) {
 - String realName = fileName.substring(fileName.lastIndexOf("/"),
 - fileName.lastIndexOf("."));
 - if (outputPath.charAt(outputPath.length()) == ‘/‘) {
 - swfFile = new File(outputPath + realName + ".swf");
 - } else {
 - swfFile = new File(outputPath + realName + ".swf");
 - }
 - }
 - }
 - }
 - java文件上传并调用转换器对文件进行转换:
 
- String newFileName = null;
 - // 得到当前时间自1970年1月1日0时0秒开始流失的毫秒数,将这个毫秒数作为上传文件的文件名
 - long now = new Date().getTime();
 - // 得到保存上传文件的目录的真实路径
 - String path = ServletActionContext.getServletContext().getRealPath(uploadDir);
 - path=path.replace( ‘\\‘, ‘/‘ );
 - newFileName=now+agreement.getAgreeNum()+fileName.substring(fileName.lastIndexOf( "."));
 - File dir = new File(path);
 - dir.mkdirs();
 - //删除旧文件
 - if(!Stringer.isNullOrEmpty(agreement.getPath()))
 - {
 - File oldFile= new File(dir,agreement.getPath().substring(agreement.getPath().lastIndexOf("/")+1));
 - if(oldFile.exists())
 - {
 - oldFile.delete();
 - }
 - }
 - agreement.setPath(uploadDir+ "/"+newFileName);
 - agreementDao.saveAgreement(agreement);
 - BufferedOutputStream bos = null;
 - BufferedInputStream bis = null;
 - // 将上传的文件保存在本地目录
 - File newFile = null;
 - try {
 - FileInputStream fis = new FileInputStream(file);
 - bis = new BufferedInputStream(fis);
 - newFile = new File(dir, newFileName);
 - FileOutputStream fos = new FileOutputStream(newFile);
 - bos = new BufferedOutputStream(fos);
 - byte[] buf = new byte[1024];
 - int len = -1;
 - while ((len = bis.read(buf)) != -1) {
 - bos.write(buf, 0, len);
 - }
 - } catch (Exception e) {
 - e.printStackTrace();
 - throw new Exception();
 - } finally {
 - try {
 - if (null != bis)
 - bis.close();
 - if (null != bos)
 - bos.close();
 - } catch (Exception e) {
 - e.printStackTrace();
 - throw new Exception();
 - }
 - }
 - DocConverter d = new DocConverter(converfilename);
 - d.conver();
  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">
 - <script type="text/javascript" src=" ${ctx}/js/flexpaper/jquery.js"></ script>
 - <script type="text/javascript" src=" ${ctx}/js/flexpaper/flexpaper_flash.js"></script >
 - <script type="text/javascript" src=" ${ctx}/js/flexpaper/flexpaper_flash_debug.js"></script >
 - <style type="text/css" media="screen">
 - html, body { height:100%; }
 - body { margin :0; padding:0; overflow:auto ; }
 - #flashContent { display :none; }
 - </style>
 - <title> 文档在线预览系统 </title>
 - </head>
 - <body>
 - <div style="text-align : center;width: 100%;" id= "c">
 - <a id= "viewerPlaceHolder" style="width :820px;height:650px;" ></a>
 - <script type="text/javascript" >
 - var width=$("#c" ).width();
 - var height=$(document).height();
 - $( "#viewerPlaceHolder").css("width" ,width*0.94+"px");
 - $( "#viewerPlaceHolder").css("height" ,height+"px");
 - $("#viewerPlaceHolder" ).css("padding-left",width*0.03+ "px");
 - $( "#viewerPlaceHolder").css("display" ,"block" );
 - var name="${param.name}" ;
 - name=name.substring(0, name.lastIndexOf( "."))+".swf" ;
 - var fp = new FlexPaperViewer(
 - ‘${ctx}/swf/FlexPaperViewer‘,
 - ‘viewerPlaceHolder‘, { config : {
 - SwfFile : escape( ‘${ctx}/‘+name),
 - Scale : 1.0,
 - ZoomTransition : ‘easeOut‘,
 - ZoomTime : 0.5,
 - ZoomInterval : 0.2,
 - FitPageOnLoad : false,
 - FitWidthOnLoad : false,
 - FullScreenAsMaxWindow : false,
 - ProgressiveLoading : false,
 - MinZoomSize : 0.2,
 - MaxZoomSize : 5,
 - SearchMatchAll : false,
 - InitViewMode : ‘SinglePage‘,
 - ViewModeToolsVisible : true,
 - ZoomToolsVisible : true,
 - NavToolsVisible : true,
 - CursorToolsVisible : true,
 - SearchToolsVisible : true,
 - localeChain: ‘zh_CN‘
 - }});
 - </script>
 - </div>
 - </body>
 - </html>
 
4、运行效果:
JAVA+FlexPaper+OpenOffice+SWFTools文档预览
原文:http://www.cnblogs.com/yaowen/p/4203763.html