仿豆丁网在线浏览文件方案openoffice.org 3+swftools+flexpaper

2023-10-09 14:50

本文主要是介绍仿豆丁网在线浏览文件方案openoffice.org 3+swftools+flexpaper,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最近在给客户开发XX系统时,客户要求上传到管理系统的文档(包括*.doc;*.docx;*.xls;*.xlsx;*.ppt;*.pptx;*.pdf;)只能预览不允许下载不允许打印。

就想打到了百度文库和豆丁网,百度文库和豆丁网的在线预览都是利用flash来播放文档的,在网上查阅了大量资料,终于实现了该项功能,

现将自己的设计和实现整理如下,可下载。

 

将文档转成flash支持的swf文件实现在线播放
1.先用openOffice把*.doc;*.docx;*.xls;*.xlsx;*.ppt;*.pptx;*.pdf类型的文档转换成pdf
2.用swftools将pdf转换成swf,然后利用FlexPaper插件实现在线播放预览。


openoffice

 OpenOffice.org 是一套跨平台的办公室软件套件,能在 Windows、Linux、MacOS X (X11)和 Solaris 等操作系统上执行。它与各个主要的办公室软件套件兼容。OpenOffice.org 是自由软件,任何人都可以免费下载、使用及推广它。

主要模块有writer(文本文档),impress(演示文稿),Calc(电子表格),Draw(绘图),Math(公式),base(数据库)

最新中文正式版:Apache_OpenOffice_incubating_3.4.1_Win_x86_install_zh-CN。

 

  FlexPaper

FlexPaper是一个开源轻量级的在浏览器上显示各种文档的组件,被设计用来与PDF2SWF一起使用, 使在Flex中显示PDF成为可能,而这个过程并无需PDF软件环境的支持。它可以被当做Flex的库来使用。
另外你也可以通过将一些例如Word、PPT等文档转成PDF,然后实现在线浏览。

1.安装必备工具组件
(1)安装openoffice,openoffice是开源免费的文字处理软件,它可以将office文档转成pdf文件(安装到C:\Program Files (x86)\OpenOffice 4\program),openOffice下载地址 http://www.openoffice.org/download/index.html
(2)安装完openoffice后必须启动其server,以命令行方式启动openoffice server。进入cmd命令行提示符C:\Program Files (x86)\OpenOffice 4\program\
输入如下命令:
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

¥

 

每次都启动这个命令可以写个bat文件

の

 
进入windows任务管理器查看有个进程soffice.bin,说明openoffice启动成功!
の


(3)安装swfTools(安装到C:\Program Files)swftools作用是将pdf转换为swf文件以便flexpaper播放。下载地址:http://www.swftools.org/download.html
(4)下载flexpaper,下载地址:http://flexpaper.devaldi.com/download/
(5)下载OpenDocument文档转换器 JODConverter,JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用OpenOffice来进行转换工作,它能进行以下的转换工作:
a.Microsoft Office格式转换为OpenDucument,以及OpenDucument转换为Microsoft Office
b.OpenDucument转换为PDF,Word、Excel、PowerPoint转换为PDF,RTF转换为PDF等。
下载地址:http://sourceforge.net/projects/jodconverter/files/

 

 

示例代码:

 1 将上面解压的flexpaper文件中的js文件夹(包含了flexpaper_flash_debug.js,flexpaper_flash.js,jquery.js,这三个js文件主要是预览swf文件的插件)拷贝至网站根目录;将FlexPaperViewer.swf拷贝至网站根目录下(该文件主要是用在网页中播放swf文件的播放器),目录结构如下图

の

 

2 创建onlineRead.jsp文件

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> <head> <title></title>         <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <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/swfobject/swfobject.js"></script><script type="text/javascript" src="js/flexpaper_flash.js"></script><script type="text/javascript"> <!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. -->var swfVersionStr = "10.0.0";<!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->var xiSwfUrlStr = "playerProductInstall.swf";var flashvars = { SwfFile : escape("Paper.swf"),Scale : 0.6, ZoomTransition : "easeOut",ZoomTime : 0.5,ZoomInterval : 0.1,FitPageOnLoad : false,FitWidthOnLoad : true,PrintEnabled : true,FullScreenAsMaxWindow : false,ProgressiveLoading : true,PrintToolsVisible : true,ViewModeToolsVisible : true,ZoomToolsVisible : true,FullScreenVisible : true,NavToolsVisible : true,CursorToolsVisible : true,SearchToolsVisible : true,localeChain: "en_US"};var params = {}params.quality = "high";params.bgcolor = "#ffffff";params.allowscriptaccess = "sameDomain";params.allowfullscreen = "true";var attributes = {};attributes.id = "FlexPaperViewer";attributes.name = "FlexPaperViewer";swfobject.embedSWF("FlexPaperViewer.swf", "flashContent", "650", "500",swfVersionStr, xiSwfUrlStr, flashvars, params, attributes);swfobject.createCSS("#flashContent", "display:block;text-align:left;");</script> </head> <body> <div id="flashContent"> <p> </p> </div></body> 
</html>

 

3  创建文档转换类OFFICE2SWFUtil.java

package com.iori.webapp.util;import java.io.File;
import java.io.IOException;
import java.io.Serializable;/*** 2014-7-24* @author DTF*/
public class OFFICE2SWFUtil  implements Serializable{private String  pdf2swfTool= "D:/Program Files/SWFTools/pdf2swf.exe";private static final long serialVersionUID = 8410551332651163557L;private String fileType = ".doc;.xls;.ppt;.docx;.xlsx;.pptx";/*** office file(.doc;.xls;.ppt;.docx;.xlsx;.pptx)* */private File officFile = null; /*** pdf file * */private File pdfFile = null;/*** swfFile* */private File swfFile = null;private File swfURL = null;/**** test1.doc ---> test1 file name* */private String abFileName = null;/*** test1.doc ---> doc * */private String bcFileName = null;/*** fileURL* */private String fileURL = null;public OFFICE2SWFUtil(){}public OFFICE2SWFUtil(String fileUrl){officFile = new File(fileUrl);}public void toChange() throws IOException{setFileURL(officFile.getParent()); //文件路径String fileName = officFile.getName(); //文件名setAbFileName(fileName.substring(0,fileName.lastIndexOf("."))); //文件真实的名称setBcFileName(fileName.substring(fileName.lastIndexOf("."),fileName.length())); //文件后缀if(officFile.exists()){ //判断文件是否存在if(isContext(this.getBcFileName())){ //判断是否是office 文件pdfFile = new File(getFileURL()+"/"+getAbFileName()+".pdf");swfURL = new File(getFileURL()+"/"+getAbFileName());if(!swfURL.exists()){swfURL.mkdirs();}DOC2PDFUtil dp = new DOC2PDFUtil(officFile, pdfFile);dp.run();PDF2SWFUtil.pdf2swf(getFileURL()+"/"+getAbFileName()+".pdf",getFileURL()+"/"+getAbFileName()+"/"+getAbFileName(), pdf2swfTool);new File(getFileURL()+"/"+getAbFileName()+".pdf").delete();}else if(this.getBcFileName().equals(".pdf")){ //判断是否是 pdf文件PDF2SWFUtil.pdf2swf(getFileURL()+"/"+getAbFileName()+".pdf",getFileURL()+"/"+getAbFileName()+"/"+getAbFileName(), pdf2swfTool);}}}private boolean isContext(String bcFileName){boolean flag = false;if(bcFileName != null && !"".endsWith(bcFileName)){String[] typeList = fileType.split(";");for(String type : typeList){if(type.equals(bcFileName)){return true;}}}return flag;}public static void main(String[] args) {try {new OFFICE2SWFUtil("D:/temp/1.docx").toChange();new OFFICE2SWFUtil("D:/temp/test1.xls").toChange();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public File getOfficFile() {return officFile;}public void setOfficFile(File officFile) {this.officFile = officFile;}public File getPdfFile() {return pdfFile;}public void setPdfFile(File pdfFile) {this.pdfFile = pdfFile;}public File getSwfFile() {return swfFile;}public void setSwfFile(File swfFile) {this.swfFile = swfFile;}public String getAbFileName() {return abFileName;}public void setAbFileName(String abFileName) {this.abFileName = abFileName;}public String getBcFileName() {return bcFileName;}public void setBcFileName(String bcFileName) {this.bcFileName = bcFileName;}public String getFileURL() {return fileURL;}public void setFileURL(String fileURL) {this.fileURL = fileURL;}public File getSwfURL() {return swfURL;}public void setSwfURL(File swfURL) {this.swfURL = swfURL;}}


 

4.启动Tomcat输入以下路径:http://localhost:8080/DocConverter/onlineRead.jsp

运行效果如下:

の

 

 

 

 

 

 

 

这篇关于仿豆丁网在线浏览文件方案openoffice.org 3+swftools+flexpaper的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/173594

相关文章

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

电力系统中的A类在线监测装置—APView400

随着电力系统的日益复杂和人们对电能质量要求的提高,电能质量在线监测装置在电力系统中得到广泛应用。目前,市场上的在线监测装置主要分为A类和B类两种类型,A类和B类在线监测装置主要区别在于应用场景、技术参数、通讯协议和扩展性。选择时应根据实际需求和应用场景综合考虑,并定期维护和校准。电能质量在线监测装置是用于实时监测电力系统中的电能质量参数的设备。 APView400电能质量A类在线监测装置以其多核

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

如何选择SDR无线图传方案

在开源软件定义无线电(SDR)领域,有几个项目提供了无线图传的解决方案。以下是一些开源SDR无线图传方案: 1. **OpenHD**:这是一个远程高清数字图像传输的开源解决方案,它使用SDR技术来实现高清视频的无线传输。OpenHD项目提供了一个完整的工具链,包括发射器和接收器的硬件设计以及相应的软件。 2. **USRP(Universal Software Radio Periphera

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

火语言RPA流程组件介绍--浏览网页

🚩【组件功能】:浏览器打开指定网址或本地html文件 配置预览 配置说明 网址URL 支持T或# 默认FLOW输入项 输入需要打开的网址URL 超时时间 支持T或# 打开网页超时时间 执行后后等待时间(ms) 支持T或# 当前组件执行完成后继续等待的时间 UserAgent 支持T或# User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器