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

实现方式

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. mybatis源码阅读
  2. 活动目录系列之三---域控制器常规卸域
  3. 《深入浅出WPF》笔记——事件篇
  4. 【java设计模式】-00目录
  5. 互联网1分钟 |0102
  6. 14个超有料的优质公众号,关注了就舍不得删
  7. fiddler chrome_fiddler抓包教程
  8. python字典中的键是什么_在python字典中作为键的对象
  9. clion jiqiao
  10. java中signum使用_Java.math.BigInteger.signum()方法实例
  11. [C#]六十甲子纳音WM版 v2.1 By:LESLIE
  12. Java Map是否有序?
  13. ppt抽奖vba代码
  14. VBA 合并同文件夹下多工作簿中同名工作表到 一工作簿一工作表
  15. 运维工程师使用的运维平台和工具表
  16. c++调用动态库失败解决办法
  17. Windows更新一直卡在“正在检查更新”如何解决
  18. 砺鹰职业测评|更了解自己的职业兴趣
  19. Java实现填写乘法算式
  20. 区块链思维—系统性思维

热门文章

  1. 易语言 剪切板 html,易语言剪切板操作源码
  2. python 设置时区_python时区设置的两种方式
  3. win7计算机里找不到硬盘,win7系统安装找不到硬盘驱动器的解决方法
  4. 苹果倒数第三!酷安5月手机热度TOP10出炉,三星OPPO领跑
  5. 求多边形的质心hdu1115
  6. 【前端学习】unicode码点问题 es6,为什么\u{20BB7}和\uD842\uDFB7相同
  7. noteexpress 笔记导出_礼拜笔记下载V1.0.6-礼拜笔记安卓版下载
  8. rtx3080显卡怎么样 rtx3080功耗
  9. 解析库Beautiful Soup的使用
  10. 白领创业做起了小龙虾的生意,如今公司日销售额达30万元