`
Dxx23
  • 浏览: 142587 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

FlexPaper+SWFTools ,java实现在线文档浏览

阅读更多
1、安装openoffice,OpenOffice_3.4.0_Win_x86_zh-CN.zip,使用新建OpenOfficeService.properties文件,放到src目录下
OO_HOME = C:\\Program Files (x86)\\OpenOffice.org 3
oo_host = 127.0.0.1
oo_port = 8100


2、下载 jodconverter-2.2.2,将lib目录所有jar 复制到项目 lib目录

3、 下载swftools-0.9.2.exe 安装后,复制安装目录中到 pdf2swf.exe 到项目附件目录中。

4、下载Flexpaper,引用其中的js

5、在环境变量中的Path配置如下:(注最后的“;”不要)
C:\Program Files (x86)\OpenOffice.org 3\program;D:\IdeaProjects\zsbk\zsbk\out\artifacts\zsbk_war_exploded\JS\StreetMap\flexpaper

<%@ page import="com.xxx.util.FlashUtil" %>
<%--
  Created by IntelliJ IDEA.
  Date: 13-7-11
  Time: 上午8:34
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String applicationPath = application.getRealPath("");
//    String filePath="http://x.x.x.x/JieJing/";
    String fileName=request.getParameter("fileName");
    String contextPath = request.getContextPath();
    String flashFile = null;
    String filePath = null;
    if(fileName.indexOf("gisPhotos")!=-1){
        fileName = fileName.substring(fileName.lastIndexOf("gisPhotos/"),fileName.length());
        filePath =applicationPath + "\\JS\\StreetMap";
        flashFile = new FlashUtil().beginConvert(filePath,fileName);//绝对路径   相对路径
        flashFile = "\\JS\\StreetMap\\" +flashFile;
        flashFile = contextPath+flashFile.replace("\\","/");
    }else{
        filePath =applicationPath + "\\JS\\StreetMap\\flexpaper";
//    fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
        flashFile = new FlashUtil().beginConvert(filePath,fileName);//绝对路径   相对路径
    }
%>
<html>
<head>
    <title>在线文档浏览</title>
    <style type="text/css" media="screen">
        html, body	{ height:100%; }
        body { margin:0; padding:0; overflow:auto; }
    </style>

    <script type="text/javascript" src="js/flexpaper_flash.js"></script>
</head>
<body>
<div style="position:absolute;left:0px;top:0px;width:100%;height:100%;">
    <a id="viewerPlaceHolder" style="width:100%;height:100%;display:block"></a>

    <script type="text/javascript">
        var fp = new FlexPaperViewer(
                'FlexPaperViewer',
                'viewerPlaceHolder', { config : {
                    SwfFile : escape('<%=flashFile%>'),
                    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: 'zh_CN'
                }});
    </script>
</div>
</body>
</html>


package com.xxx.util;


import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.ConnectException;

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;

/**
 * Created with IntelliJ IDEA.
 * Date: 13-7-11
 * Time: 上午10:46
 * To change this template use File | Settings | File Templates.
 */
public class FlashUtil {

    public static  void main(String[] args){
        String outPath = new FlashUtil().beginConvert("","附件.pdf");
        System.out.println("生成swf文件:" + outPath);
//        boolean outPath = new FlashUtil().isExistFlash("123.pdf");
//        System.out.println("是否存在swf文件:" + outPath);
    }
    private static final String DOC = ".doc";
    private static final String DOCX = ".docx";
    private static final String XLS = ".xls";
    private static final String XLSX = ".xlsx";
    private static final String PDF = ".pdf";
    private static final String SWF = ".swf";
    private static final String TOOL = "pdf2swf.exe";

    /**
     * 入口方法-通过此方法转换文件至swf格式
     * @param filePath 上传文件所在文件夹的绝对路径
     * @param fileName	文件名称
     * @return			生成swf文件名
     */
    public String beginConvert(String filePath,String fileName) {
        String outFile = "";
        String fileNameOnly = "";
        String fileExt = "";
        if (null != fileName && fileName.indexOf(".") > 0) {
            int index = fileName.indexOf(".");
            fileNameOnly = fileName.substring(0, index);
            fileExt = fileName.substring(index).toLowerCase();
        }
        String inputFile = filePath + File.separator + fileName;
        String outputFile = "";
        //如果是flash文件,直接显示
        if(fileExt.equals(SWF)){
            outFile = fileName;
        }else {
            //主要是针对中文汉字转拼音
            fileNameOnly = new CnToSpell().getPinYin(fileNameOnly);
            //如果存在对应的flash文件
            boolean  isExistFlash = isExistFlash(filePath,fileNameOnly);
            if(isExistFlash){
                outFile = fileNameOnly + SWF;
            }else {
                //如果是office文档,先转为pdf文件
                if (fileExt.equals(DOC) || fileExt.equals(DOCX) || fileExt.equals(XLS)
                        || fileExt.equals(XLSX)) {
                    outputFile = filePath + File.separator + fileNameOnly + PDF;
                    File pdfFile = new File(outputFile);
                    if(!pdfFile.exists()){//判断pdf文件是否已经生成
                        office2PDF(inputFile, outputFile);
                    }
                    inputFile = outputFile;
                    fileExt = PDF;
                }
                if (fileExt.equals(PDF)) {
                    outputFile = filePath + File.separator + fileNameOnly + SWF;
                    outputFile = outputFile.replace("\\","/");
                    File swfFile = new File(outputFile);
                    if(!swfFile.exists()){//判断swf文件是否已经生成
                        File parentFolder = swfFile.getParentFile();
                        if(parentFolder!=null&&!parentFolder.exists()){
                            parentFolder.mkdirs();
                        }
                        String toolFile = null;
                        if(filePath.indexOf("flexpaper")==-1){
                            toolFile = filePath + File.separator +"flexpaper"+ File.separator + TOOL;
                        }else{
                            toolFile = filePath + File.separator + TOOL;
                        }
                        convertPdf2Swf(inputFile, outputFile, toolFile);
                    }
                    outFile = fileNameOnly + SWF;
                }
            }
        }
        return outFile;
    }

    /**
     * 将pdf文件转换成swf文件
     * @param sourceFile pdf文件绝对路径
     * @param outFile	 swf文件绝对路径
     * @param toolFile	 转换工具绝对路径
     */
    private void convertPdf2Swf(String sourceFile, String outFile,
                                String toolFile) {
        String command = toolFile + " \"" + sourceFile + "\" -o  \"" + outFile
                + "\" -s flashversion=9 ";
        try {
            Process process = Runtime.getRuntime().exec(command);
            System.out.println(loadStream(process.getInputStream()));
            System.err.println(loadStream(process.getErrorStream()));
            System.out.println(loadStream(process.getInputStream()));
            System.out.println("###--Msg: swf 转换成功");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 检测文件夹下是否已存在对应的flash文件
     * @return
     */
        private boolean isExistFlash(String filePath,String fileNameOnly){
            String fileName = fileNameOnly.substring(fileNameOnly.lastIndexOf("/")+1);
            String newFilePath = fileNameOnly.substring(0 ,fileNameOnly.lastIndexOf("/")+1);
            File file = new File(filePath + File.separator+newFilePath);
            if(!file.exists()){//判断是否已经生成新文件夹,然后再去判断文件夹是否存在对应的flash文件
                return false;
            }
            File[] files = file.listFiles();
            for(int j=0;j<files.length;j++){
                if(files[j].isFile()){
                    String filesName = files[j].getName();
                    if(filesName.indexOf(".")!=-1){
                        if(SWF.equals(filesName.substring(filesName.lastIndexOf(".")).toLowerCase())){
                                if(fileName.equals(filesName.substring(0,filesName.lastIndexOf(".")))){
                                    return true;
                                }
                        }
                    }
                }
            }
            return false;
        }

    /**
     * office文档转pdf文件
     * @param sourceFile	office文档绝对路径
     * @param destFile		pdf文件绝对路径
     * @return
     */
    private int office2PDF(String sourceFile, String destFile) {
        String OpenOffice_HOME = CommUtil.OpenOffice_HOME;
        String host_Str = CommUtil.host_Str;
        String port_Str = CommUtil.port_Str;
        try {
            File inputFile = new File(sourceFile);
            if (!inputFile.exists()) {
                return -1; // 找不到源文件
            }
            // 如果目标路径不存在, 则新建该路径
            File outputFile = new File(destFile);
            if (!outputFile.getParentFile().exists()) {
                outputFile.getParentFile().mkdirs();
            }
            // 启动OpenOffice的服务
            String command = OpenOffice_HOME
                    + "\\program\\soffice.exe -headless -accept=\"socket,host="
                    + host_Str + ",port=" + port_Str + ";urp;\"";
            System.out.println("###\n" + command);
            Process pro = Runtime.getRuntime().exec(command);
            // 连接openoffice服务
            OpenOfficeConnection connection = new SocketOpenOfficeConnection(
                    host_Str, Integer.parseInt(port_Str));
            connection.connect();
            // 转换
            DocumentConverter converter = new OpenOfficeDocumentConverter(
                    connection);
            converter.convert(inputFile, outputFile);

            // 关闭连接和服务
            connection.disconnect();
            pro.destroy();

            return 0;
        } catch (FileNotFoundException e) {
            System.out.println("文件未找到!");
            e.printStackTrace();
            return -1;
        } catch (ConnectException e) {
            System.out.println("OpenOffice服务监听异常!");
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 1;
    }

    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();
    }
}




package xxx.platform.util;

import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;

/**
 * Created with IntelliJ IDEA.
 * User: xxx
 * Date: 13-7-12
 * Time: 下午3:52
 * To change this template use File | Settings | File Templates.
 */
public class CnToSpell {

    public  String getPinYin(String src) {
        char[] t1 = null;
        t1 = src.toCharArray();
        String[] t2 = new String[t1.length];
        // 设置汉字拼音输出的格式
        HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
        t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        t3.setVCharType(HanyuPinyinVCharType.WITH_V);
        String t4 = "";
        int t0 = t1.length;
        try {
            for (int i = 0; i < t0; i++) {
                // 判断是否为汉字字符
                if (Character.toString(t1[i]).matches("[\\u4E00-\\u9FA5]+")) {
                    t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);// 将汉字的几种全拼都存到t2数组中
                    t4 += t2[0];// 取出该汉字全拼的第一种读音并连接到字符串t4后
                } else {
                    // 如果不是汉字字符,直接取出字符并连接到字符串t4后
                    t4 += Character.toString(t1[i]);
                }
            }
        } catch (BadHanyuPinyinOutputFormatCombination e) {
            e.printStackTrace();
        }
        if(t4.indexOf("【")!=-1){
            t4 = t4.replace("【","[");
        }
        if(t4.indexOf("】")!=-1){
            t4 = t4.replace("】","]");
        }
        if(t4.indexOf("(")!=-1){
            t4 = t4.replace("(","(");
        }
        if(t4.indexOf(")")!=-1){
            t4 = t4.replace(")",")");
        }
        return t4;
    }


    public  String getPinYinHeadChar(String str) {
        String convert = "";
        for (int j = 0; j < str.length(); j++) {
            char word = str.charAt(j);
            // 提取汉字的首字母
            String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
            if (pinyinArray != null) {
                convert += pinyinArray[0].charAt(0);
            } else {
                convert += word;
            }
        }
        return convert;
    }


    public  String getCnASCII(String cnStr) {
        StringBuffer strBuf = new StringBuffer();
        // 将字符串转换成字节序列
        byte[] bGBK = cnStr.getBytes();
        for (int i = 0; i < bGBK.length; i++) {
            strBuf.append(Integer.toHexString(bGBK[i] & 0xff));
        }
        return strBuf.toString();
    }

    public static void main(String[] args) {
        CnToSpell cnToSpell = new CnToSpell();
        String cnStr = "中华人民共和国(A-C)(12)_12345";
        System.out.println(cnToSpell.getPinYin(cnStr));
        System.out.println(cnToSpell.getPinYinHeadChar(cnStr));
        System.out.println(cnToSpell.getCnASCII(cnStr));
    }
}


package xxx.platform.util;

import java.util.ResourceBundle;

/**
 * Created with IntelliJ IDEA.
 * User: xxx
 * Date: 13-7-12
 * Time: 上午8:42
 * To change this template use File | Settings | File Templates.
 */
public class CommUtil {
    public static final String OpenOffice_HOME;
    public static final String host_Str;
    public static final String port_Str;

    static {
        ResourceBundle rb = ResourceBundle.getBundle("OpenOfficeService");
        OpenOffice_HOME = rb.getString("OO_HOME");
        host_Str = rb.getString("oo_host");
        port_Str = rb.getString("oo_port");
    }

    public static int strToInt(String str){
        int i =0;
        if(str!=null&&!"".equals(str)){
            i = Integer.parseInt(str);
        }
        return i;
    }
    public static double strToDouble(String str){
        double d =0.0;
        if(str!=null&&!"".equals(str)){
            d = Double.parseDouble(str);
        }
        return d;
    }
}


参考:
http://blog.csdn.net/authorzhh/article/details/7470048

http://www.cnblogs.com/qinpeifeng107/archive/2011/08/29/2158879.html
分享到:
评论
3 楼 shayuan312 2015-11-24  
楼主您好,可以把这个的源码给我发一份么?395428137@qq.com 你这个我看了好久没实现啊 拜托大神了
2 楼 Dxx23 2014-02-25  
zengxuefei 写道
,贴出来的代码根本不能执行,好多错误,尤其是缺少了CnToSpell和CommUtil类。楼主说的步骤走确定已经完成没有错误

已补充两个公共类,其他架包什么的自己下,是一个成功事例,所以才把代码贴上。
1 楼 zengxuefei 2014-02-21  
,贴出来的代码根本不能执行,好多错误,尤其是缺少了CnToSpell和CommUtil类。楼主说的步骤走确定已经完成没有错误

相关推荐

    FlexPaper+swfTools仿文档在线阅读

    FlexPaper+swfTools仿文档在线阅读是一种技术解决方案,它允许用户在网页上实现类似真实文档的在线预览体验。这种技术主要应用于那些希望提供无须下载即可在线查看各种文档格式(如PDF、DOC等)的网站和服务。下面将...

    Java+FlexPaper+swfTools 文档在线阅读

    Java+FlexPaper+swfTools 是一种常见的技术组合,用于实现文档在线预览和阅读功能。这个技术栈主要由三个核心组件组成:Java、FlexPaper 和 swfTools。下面将详细解释这三个组件以及如何整合它们来创建一个文档在线...

    Java+FlexPaper+swfTools_仿百度文库文档在线预览系统设计与实现

    ### Java+FlexPaper+swfTools_仿百度文库文档在线预览系统设计与实现 #### 关键技术点概述 本文档将详细阐述一个模仿百度文库文档在线预览系统的实现过程,该系统通过结合Java、FlexPaper和swfTools等技术手段,...

    Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现.pdf

    ### Java+FlexPaper+swfTools 仿百度文库文档在线预览系统设计与实现 本文将详细介绍如何使用Java结合FlexPaper和swfTools技术来实现一个类似百度文库的文档在线预览系统。该系统的主要功能是允许用户在线浏览各种...

    Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现.docx

    根据提供的文档标题、描述、标签以及部分内容,本文将详细介绍如何使用Java、FlexPaper及swfTools来设计并实现一个类似于百度文库的文档在线预览系统。本系统旨在让用户能够在线预览各种类型的文档,无需下载或安装...

    FlexPaper+swftools+jodConverter

    FlexPaper、SwfTools 和 JodConverter 是三个在文档在线预览领域中广泛使用的开源工具。下面将分别介绍这三个工具及其在文档处理中的作用。 1. **FlexPaper**: FlexPaper 是一款强大的在线文档查看和转换解决方案...

    java+flexpaper+swftools office转为swf

    Java结合FlexPaper、SWFTools和OpenOffice是一个常见的解决方案,用于将Microsoft Office文档转换为SWF格式,以便在Web上以交互式的方式展示。这个过程涉及到多个步骤和技术,以下是详细的解释: 1. **Java**: Java...

    java + openOffice + swfTools + flexpaper 实现的仿百度文库文档在线浏览(源码)

    鉴于网上找的在线浏览都略去了flexpaper ,于是自己花费几个小时完成了openOffice + swfTools + flexpaper 技术实现仿百度文库的在线浏览。功能已经实现,需要的自己下去优化一下,修改下openoffice和SWFTOOLS安装...

    Java-FlexPaper-swfTools-仿百度文库文档在线预览系统设计与实现.docx

    Java-FlexPaper-swfTools-仿百度文库文档在线预览系统设计与实现 本文主要介绍了使用Java、FlexPaper和swfTools实现文档在线预览系统的设计和实现。该系统可以将上传的文档(包括ppt、word、excel、txt)转换为swf...

    Java实现文档在线预览demo(openoffice+swfTools+FlexPaper)

    本篇文章将详细讲解如何利用Java技术栈,结合OpenOffice、swfTools和FlexPaper,来实现一个文档在线预览的简易DEMO。 首先,我们来看核心组件: 1. **OpenOffice**:这是一个开源的办公软件套件,包含了一个用于...

    java-flexpaper-swftools仿百度文库文档在线预览系统设计与实现.doc

    通过以上步骤,一个简单的Java FlexPaper SWFTools在线预览系统得以实现,有效地保护了文档的安全性,只提供预览功能,避免了直接下载可能带来的风险。这样的系统对于企业内部文档管理系统或在线教育平台尤其有用。

    java 实现office文档的在线预览

    java 实现的文档在线预览: 需要下载的工具有:OpenOffice+flexpaper+swftools+jodcconverter * .启动OpenOffice的服务 * 1 win+R开启dos窗口 * 2 执行:cd C:\Program Files (x86)\OpenOffice 4\program * 3 ...

    openoffcie+swftools+flexpaper实现类似百度文库的阅读效果

    总的来说,通过OpenOffice的文档解析能力,SwfTools的SWF转换功能,以及FlexPaper的前端展示技术,我们可以构建一个类似百度文库的在线阅读平台,让用户在网页上便捷、舒适地浏览和预览各种类型的文档。这样的系统...

    java+swfTools+openoffice+FlexPaper在线阅读实例

    Java、SWFTools、OpenOffice 和 FlexPaper 是构建在线阅读平台的关键技术,它们共同作用于创建一个高效且用户友好的文档预览系统。这个实例主要关注如何将这些工具结合使用,为用户提供PDF、DOC等常见格式文档的在线...

    仿百度文库文档在线预览

    Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现

    在线预览所需工具包FlexPaper jodconverter swftools

    FlexPaper、jodConverter和swftools是三个关键的开源工具,它们在IT行业中主要用于创建和实现在线文档预览功能。下面将详细解释这三个工具及其在在线预览系统中的作用。 FlexPaper是一款强大的文档查看和转换框架,...

    java实现在线文档预览(项目+相关软件)

    本项目"java实现在线文档预览(项目+相关软件)"正是针对这一需求的解决方案,它结合了Java后端技术和前端展示技术,实现了对Office文档和PDF文件的在线预览。以下将详细介绍该系统的实现原理和关键组件。 首先,...

    PDF 在线阅读器 源码

    完全仿照百度文库 开发 使用JAVA+FlexPaper+ swftools 基于MyEclipse 开发,上传pdf文件后可以在线进行查看 支持分页 缩放 全屏,查找 等等.... 开发环境: jdk1.5+Tomcat5.5 使用说明: 1.将OnLinePDF导入到...

    java实现附件预览(openoffice+swftools+flexpaper)实例

    最后,前端页面通过调用FlexPaper的相关方法加载转换后的SWF文件,实现文档的在线预览。 总的来说,通过OpenOffice、SWFTools和FlexPaper的结合,Java开发者可以构建一个功能完善的附件预览系统,使得用户能够在...

Global site tag (gtag.js) - Google Analytics