由于项目需求,需要开发一个类似百度文库和豆丁那样的在线阅读功能。刚开始不知道如何下手,在百度和谷歌上面搜了下,相关帖子很多,不是内容相互抄袭就是肤浅的空谈(最痛恨的就是这种不负责任行为),没有一点儿参考价值。因为我没少纠结,没少碰到问题,所以就将心得分享下,希望能给看到本文的朋友些许帮助。

实现方式

Txt/Word/Excel/PPT=>PDF(OpenOffice+JodConverter)=>SWF(pdf2swf)=>FlexPaper浏览

Txt/Word/Excel/PPT=>PDF(MSOffice+JACOB)=>SWF(pdf2swf)=>FlexPaper浏览

Txt/Word/Excel/PPT=>SWF (FlashPaper)=> FlexPaper浏览

Txt/Word/Excel/PPT=>SWF(print2flash)=> FlexPaper浏览

前两种方式比较麻烦,都是先转成PDF,再转成SWF,最后用FlexPaper浏览。后两种比较快捷,可直接将源文件转为SWF,用FlexPaper浏览。由于FlashPaper不是开源工具,加之Win7系统不兼容(我现在用的系统),所以就没采用第三种实现方式。Print2flash是开源工具,即使公司产品中用到也不会出现版权纠纷,遗憾的是没找到如何用程序控制该工具转换文件的命令。第二种方式转PDF的时候相当复杂,也淘汰掉了。最后直接用的第一种方式。

下载工具

OpenOffice

http://zh.openoffice.org/new/zh_cn/downloads.html

JodConverter

http://dldx.csdn.net/fd.php?i=992314146801277&s=08dbee95a6e2dda1a95aa8cbf4df197b

Swftools(pdf2swf)

http://dldx.csdn.net/fd.php?i=389133735472350&s=2f7430ad3c00cca78ada8b4671a50b24

FlexPaper

http://flexpaper.googlecode.com/files/FlexPaper_1.4.5_flash.zip

① 、打开MyEclipse,新建WEB工程。我的Demo如下图:

示例工程结构

② 、将下载的JodConverter压缩包中lib目录下的jar包放到工程WEB-INF/lib中。

JodConverter压缩包lib下的jar包

③ 、在WebRoot下新建flexpaper文件夹,把下载的FlexPaper解压缩后的内容放到该文件夹中。

FlexPaper压缩包中的文件

④ 、新建ConvertServlet类,下附该类代码。

package servlet;

import java.io.File;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import com.artofsolving.jodconverter.DocumentConverter;

importcom.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;

import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;

importcom.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;

public class ConvertServlet extends HttpServlet{

private File sourceFile;    //转换源文件

private File pdfFile;           //PDF目标文件

private File swfFile;           //SWF目标文件

private Runtime r;

public void init() throws ServletException {

sourceFile = new File("D:/tomcat7/webapps/readonline/swfFile/s.ppt");

pdfFile = new File("D:/tomcat7/webapps/readonline/swfFile/s.pdf");

swfFile = new File("D:/tomcat7/webapps/readonline/swfFile/s.swf");

System.out.println("第一步:生成文件对象,准备转换");

}

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doPost(req, resp);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

//转换成pdf文件

if(sourceFile.exists()) {

if(!pdfFile.exists()) {

OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);

try {

connection.connect();

DocumentConverter converter = newOpenOfficeDocumentConverter(connection);

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服务未启动");

throw e;

} catch (com.artofsolving.jodconverter.openoffice.connection.OpenOfficeExceptione) {

e.printStackTrace();

System.out.println("读取文件失败");

throw e;

} catch (Exception e){

e.printStackTrace();

try {

throw e;

} catch (Exception e1) {

e1.printStackTrace();

}

}

} else {

System.out.println("已转换为PDF,无需再次转换");

}

} else {

System.out.println("要转换的文件不存在");

}

//转换成swf文件

r = Runtime.getRuntime();

if(!swfFile.exists()){

if(pdfFile.exists()) {

try {

Process p = r.exec("D:/Program Files/SWFTools/pdf2swf.exe " + pdfFile.getPath() + " -o " + swfFile.getPath() + " -T9");

p.waitFor();

swfFile.createNewFile();

System.out.println("第三步:转换为SWF格式 路径:" + swfFile.getPath());

System.out.println("第si步:转换为SWF格式mingcheng:" + swfFile.getName());

if(pdfFile.exists()) {

pdfFile.delete();

}

} catch (Exception e) {

e.printStackTrace();

try {

throw e;

} catch (Exception e1) {

// TODO Auto-generatedcatch block

e1.printStackTrace();

}

}

} else {

System.out.println("PDF文件不存在,无法转换");

}

} else {

System.out.println("已经转为SWF文件,无需再次转换");

}

HttpSession session = req.getSession();

session.setAttribute("fileName", swfFile.getName());

resp.sendRedirect(req.getContextPath()+"/flexpaper/readFile.jsp");

}

}

⑤   、web.xml

<?xml version="1.0"encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

<servlet>

<servlet-name>convertUtil</servlet-name>

<servlet-class>servlet.ConvertServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>convertUtil</servlet-name>

<url-pattern>/convertUtil</url-pattern>

</servlet-mapping>

</web-app>

⑥   、readFile.jsp

<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>

<%

String path =request.getContextPath();

String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html xmlns="http://www.w3.org/1999/xhtml"lang="en" xml:lang="en">

<head>

<title>在线阅读</title>

<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="js/flexpaper_flash.js"></script>

</head>

<body>

<div style="position:absolute;left:200px;top:10px;">

<a id="viewerPlaceHolder" style="width:1000px;height:800px;display:block"></a>

<script type="text/javascript">

varfp = new FlexPaperViewer(

'FlexPaperViewer',

'viewerPlaceHolder', { config : {

SwfFile : escape('http://localhost:8080/readonline/swfFile/<%=(String)session.getAttribute("fileName")%>'),

Scale : 0.6,

ZoomTransition: 'easeOut',

ZoomTime : 0.5,

ZoomInterval : 0.2,

FitPageOnLoad: true,

FitWidthOnLoad: false,

PrintEnabled : false,

FullScreenAsMaxWindow: false,

ProgressiveLoading: true,

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>

需要注意的问题

ConvertServlet中的p.waitFor();很重要,如果没有改行代码,可能出现PDF不能成功转换成SWF的情况。

新建readFile.jsp的时候一定要把<head>标签中间的<base href="<%=basePath%>">删掉,否则FlexPaper不能浏览文件。

FlexPaper不能正常浏览文件的时候,可以试试在官网添加信任。网址http://www.cnblogs.com/qinpeifeng107/archive/2011/08/29/2158879.html

readFile.jsp中动态显示文件名称的写法:第一种SwfFile : escape('http://localhost:8080/readonline/swfFile/<%=(String)session.getAttribute("fileName")%>'); 第二种:escape('../swfFile/<%=(String)session.getAttribute("fileName")%>')

项目执行需要启动OpenOffice服务,在系统命令窗口执行命令。

cd C:\Program Files\OpenOffice.org 3\program

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

实现效果图

第三种实现方式

http://blog.csdn.net/liuyuhua0066/article/details/6603493

安装上FlashPaper之后,将上面网址中的代码替换ConvertServlet中的转换代码即可。FlexPaper用法同上面介绍。

FlashPaper序列号FPD200-59917-97447-41275

如果仍有问题或者想获取Demo或者提出改进请加QQ:897259924

参考资料

http://topic.csdn.net/u/20110712/18/4daf5746-e64e-434d-aeb0-77b05f6c9903.html

http://guojun2sq.blog.163.com/blog/static/643308612011328115516368/

http://www.cnblogs.com/qinpeifeng107/archive/2011/08/29/2158879.html

http://yanjingying1986.iteye.com/blog/713187

http://www.cnblogs.com/compass/articles/2046311.html

仿百度文库、豆丁在线阅读相关推荐

  1. php如何将文档转成flas,PHP_PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash),本文实例讲述了PHP实现仿百度 - phpStudy...

    PHP实现仿百度文库,豆丁在线文档效果(word,excel,ppt转flash) 本文实例讲述了PHP实现仿百度文库,豆丁在线文档效果.分享给大家供大家参考,具体如下: 由于项目要实现类似百度文库的 ...

  2. 百度文库中在线阅读器的基本思想

    实现原理是这样的首先将这些文档转成PDF,然后使用pdf2swf.exe转成SWF文件,然后使用flexpaper播放 文档转PDF,可以使用jodconverter+openoffice 过程可以参 ...

  3. 仿百度文档豆丁在线阅读文档

    仿百度文档在线阅读文档 最近在做一个在线培训的项目有一个功能需要在线阅服务器上的文档,自己想做一个类似百度问库一样的在线阅读器,找了很多资料最后找到一个很好决绝方案,很多牛人都在博客园里发表了些了一些 ...

  4. 仿百度文库、豆丁文档网站源码在线文档分享系统最新版+带全套工具

    非常棒的一套在线文档分享系统源码,仿百度文库.豆丁文档网站源码,在这里完全免费提供给大家学习.在这里无需任何币就可以下载到非常多的精品源码,如果觉得好站长资源做的不错,请帮忙推荐给更多的站长朋友. 此 ...

  5. 仿百度文库/仿豆丁文库开源版MTCEO文库系统 v2.4

    仿百度文库/仿豆丁文库开源版MTCEO文库系统 v2.4   应众多网友要求,MCEO2.4在一片呼声中正式上线! 已安装MTCEO2.3的用户可通过后台-工具-在线升级,进行在线升级!方便简单!在升 ...

  6. 【转】asp仿百度文库、豆丁doc转换(flashpaper)

    [转]asp仿百度文库.豆丁doc转换(flashpaper)     asp仿百度文库.豆丁doc转换(flashpaper)环境: flashpaper2.2版 win2008 IIS7 步骤: ...

  7. 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf...

    第三步,使用JODConverter将office文档转换为pdf JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用 OpenOffice ...

  8. 仿百度文库方案[openoffice.org 3+swftools+flexpaper](八) 之 常见问题集FAQ

    1.txt转换swf,发生中文乱码. txt转换为utf-8编码,或txt格式手动改为odt,上传就不会发生乱码.从根源上解决,暂时就算了...暂时不想去纠结这些鸡毛. 2.加密的pdf可能导致转换为 ...

  9. thinkphp仿百度文库网站源码

    简介: thinkphp仿百度文库网站源码,php+MySQL进行开发的免费文库网站源码. 界面仿百度文库,可实现文档上传下载及在线预览,用户可以对自己需求的文档进行. 本系统采用thinkphp作为 ...

  10. 2023最新仿百度文库网站源码+UI简约大气

    正文: 仿百度文库是一个以php+MySQL进行开发的文库网站源码. 特点: 界面仿百度文库,可实现文档上传下载及在线预览. 用户可以对自己需求的文档进行悬赏. 本系统采用thinkphp作为底层框架 ...

最新文章

  1. python读取文件r_python read文件的r和rb的区别
  2. VTK:可视化算法之Stocks
  3. 从bash函数中返回任意值
  4. 信息学奥赛C++语言:社会实践任务
  5. Hibernate学习(1):查询demo
  6. hpml350服务器安装系统,安装HP ML350
  7. function在mysql里总是出错_如何在MySQL函数中引发错误
  8. Android - get email attachment name in my application
  9. 课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 2、Practice Questions...
  10. mysql之查询用户名
  11. 最有效的Safari的广告拦截插件
  12. win7局域网共享设置_win7系统打印机共享设置(详细图文步骤)
  13. 魂迁光刻,梦绕芯片,中芯国际终获ASML大型光刻机
  14. git ------git stash(储藏到缓存中) 暂时保存未被提交的数据至堆栈中
  15. 被黑客入侵了怎么办_被黑客入侵后该怎么办
  16. 记云服务器中挖矿病毒与防范
  17. 自建ngrok服务支持https访问
  18. C语言程序设计(二)基础内容
  19. Java基于ssm的大学生社团管理系统 计算机毕业设计
  20. mysql 不重复_Mysql 查询不重复数据

热门文章

  1. 服务器系统盘怎么命名,云服务器系统盘命名
  2. 酒店管理系统 Java实战 毕业设计
  3. caj格式能免费转换成pdf吗
  4. java计算机毕业设计基于安卓Android的桃源婚恋交友APP(源码+系统+mysql数据库+Lw文档)
  5. php html seo,浅谈HTML里的布局对于SEO的影响
  6. 【python日用】itertools.product用法
  7. 微软CEO 鲍尔默的一天
  8. 2022 中国开源大会“红山开源”创新论坛成功举办
  9. 大包改小包_旧包改造,改成可以放在口袋里的小包包
  10. 面试官角度看简历和笔试,不得不吐的槽