JAVA+FlexPaper+OpenOffice+SWFTools文档预览

1 篇文章 0 订阅

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" %>
    <!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、运行效果:



  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值