JAVA+FlexPaper+OpenOffice+SWFTools文档预览


1、软件环境:
  • openoffice:启动openoffice服务:soffice.exe -headless -nologo -norestore -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager
  • swftools
2、所需组件:
  • 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" %>
    
    
    
    
    
    
    
    
     文档在线预览系统 
    
    
            

4、运行效果:



你可能感兴趣的:(Flex,java)