Linux下实现文档在线浏览
使用php实现百度文库功能,网上搜索到的方案,实现doc转pdf,pdf转swf,然后显示出来。
这里简单的记录下,【doc转pdf,pdf转swf】两个功能的搭建流程。
doc转pdf
使用到下列程序(文件):
- Apache OpenOffice
- 字体文件(windows系统C:\Windows\Fonts目录下的文件)
- JAVA环境(>=1.6)
- jodconverter
实现原理:调用jodconverter的包转换doc为pdf,而jodconverter会去连接OpenOffice的soffice服务,实现转换。
两者在运行时都需要java环境的支持!而字体文件可以解决doc转为pdf时中文乱码问题!
字体文件需要自行打包Windows系统下字体文件(也许可以全部打包),先上传到服务器上,后面会用到,假设文件名为fonts.zip
安装java环境
JAVA环境的安装很简单,首先需要确认下系统中是否安装了java,并且确认java版本>=1.6。
#直接输入java -version
java -version #如果安装了java,将会显示java的版本,如果么有,那赶紧安装吧!
安装方法可以使用yum安装,或者在java.com上下载rpm包、解压即用的压缩包。这里我使用解压即用的压缩包。
java.com界面截图:

我把文件放在/opt/java/jre下,那么可以这样来显示下java的版本:
/opt/java/jre/bin/java –version
添加环境变量:
vim /etc/profile #在文件内容最后写上:
PATH=/opt/java/jre/bin:$PATH
export PATH #保存退出后,使用source使环境变量立即生效
source /etc/profile
这样java环境的搭建就完成了!
安装openoffice
注意,最新的openoffice 3.4.1版本不再捆绑java环境,所以需要手动搭建java环境。
首先,下载最新的openoffice安装包,地址:http://www.openoffice.org/download/other.html#tested-full,选择适合自己的版本:

安装包大概140多M大小,我选择的简体中文,Linux86_64 RPM包的文件名为:Apache_OpenOffice_incubating_3.4.1_Linux_x86-64_install-rpm_zh-CN.tar.gz
安装其实非常的简单:
#进入解压后的RPMS目录
cd /opt/setup/openoffice-setup/zh-CN/RPMS #使用rpm命令安装
rpm -ivh *.rpm
安装截图:

默认安装在/opt目录下,有两个文件夹:openoffice.org和openoffice.org3。
现在我们需要把已经准备好的字体文件fonts.zip解压到这个目录下:/opt/openoffice.org/basis3.4/share/fonts/truetype。
解压完成后,OpenOffice环境就已经完成了,现在让我们来启动openoffice。
我在/opt/openoffice.org3/目录下新建了文件:sofficed。
内容为:
#! /bin/bash
/opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
记得修改sofficed文件的权限为755,便于程序调用执行!
#启动openoffice
/opt/openoffice.org3/sofficed #将上面的命令写入/etc/rc.local文件中,即可开机启动了!
检查是否成功启动:
#进程查看
ps -ef | grep soffice #端口查看
netstat -tunlp | grep 8100
若能看到soffice相关信息便成功了!
安装jodconverter
此货的安装也很简单,下载安装包,解压即可!
下载地址:http://sourceforge.net/projects/jodconverter/files/JODConverter/
我把文件放在了/opt/jodconverter下。
测试doc转pdf
当然了,首先得准备一个doc文件,然后使用下面这个命令测试:
java -jar /opt/jodconverter/lib/jodconverter-cli-2.2.2.jar doc文件路径 pdf文件路径
下载生成的pdf文件,打开看看吧。
pdf转swf
使用到的程序(文件)
pdf转swf的过程相对简单一点,只需要调用swftool程序的pdf2swf程序,xpdf-chinese-simplified和font.zip可以解决中文乱码问题!
swftool程序需要编译安装,这里先固定一下安装目录为:/opt/swftool。
字体文件安装
下载xpdf-chinese-simplified和font.zip文件,然后解压。
mkdir /opt/swftool cd /opt/swftool wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz
wget http://www.nginxs.com/download/font.zip #解压两个压缩包
tar zxvf xpdf-chinese-simplified.tar.gz unzip font.zip #将font.zip解压出来的两个字体文件移到xpdf-chinese-simplified/CMap/目录下
mv Gbsn00lp.ttf gkai00mp.ttf xpdf-chinese-simplified/CMap/ #修改xpdf-chinese-simplified目录下的add-to-xpdfrc文件,内容如下:
cidToUnicode Adobe-GB1 /opt/swftool/xpdf-chinese-simplified/Adobe-GB1.cidToUnicode
unicodeMap ISO-2022-CN /opt/swftool/xpdf-chinese-simplified/ISO-2022-CN.unicodeMap
unicodeMap EUC-CN /opt/swftool/xpdf-chinese-simplified/EUC-CN.unicodeMap
unicodeMap GBK /opt/swftool/xpdf-chinese-simplified/GBK.unicodeMap
cMapDir Adobe-GB1 /opt/swftool/xpdf-chinese-simplified/CMap
toUnicodeDir /opt/swftool/xpdf-chinese-simplified/CMap
displayCIDFontTT Adobe-GB1 /opt/swftool/xpdf-chinese-simplifies/CMap/gkai00mp.ttf
字体文件安装完成。
Swftool安装
首先安装下swftool必要的插件程序
yum install zlib-devel libjpeg-devel giflib-devel freetype-devel
如果安装过了,自动忽略掉,只安装没有的。
开始安装swftool:
tar vxzf swftools-2012-10-15-1307.tar.gz cd swftools-2012-10-15-1307 ./configure --prefix=/opt/swftool make make install
如果没有异常信息,那就ok了。
测试pdf转swf
使用这个命令测试,同样在使用php代码时也可以这么调用:
/opt/swftool/bin/pdf2swf -o swf文件路径 -T -z -t -f pdf文件路径 -s languagedir=/opt/swftool/xpdf-chinese-simplified -s flashversion=9
需要注意languagedir这个参数。
其他的好像没什么了,就这么简单。
参考了这些文章:http://www.itokit.com/2012/0914/74747.html
关于PHP中执行exec函数
如果开启了Selinux,那么在exec函数中调用/var/www/html外的文件很容易被禁止,导致exec函数执行失败。
关闭Selinux:
#临时关闭
setenforce 0 #永久关闭
vim /etc/sysconfig/selinux
#将SELUNX的值修改为disabled,重启生效
SELINUX=disabled
不关闭selinux,那么就要修改所调用文件的安全环境上下文。
这里调用java时被selinux阻止了,那么可以这么做:
cd /opt #将java目录的安全环境上下文还原
restorecon -R -v java
这样Seliux就不会再阻止httpd程序访问java程序了。
转载自:http://my.oschina.net/lijialong/blog/109499?fromerr=BgixkJut
------------------------
页面展示采用Flexpaper
要注意的是flexpaper引用的swf文件存放目录要设置好,flexpaper.js文件中有变量指向flexpaper应用的swf文件。
window[instance] = flashembed(id, {
src : _jsDirectory+"../FlexPaperViewer.swf",
version : [10, 0],
expressInstall : "js/expressinstall.swf",
wmode : _WMode
}
目录结构:

index.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//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="description" content="This is my page"> <link rel="stylesheet" type="text/css" href="css/flexpaper.css" />
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/flexpaper.js"></script>
<script type="text/javascript" src="js/flexpaper_handlers.js"></script>
</head>
<body>
<div id="documentViewer" class="flexpaper_viewer" style="width:770px;height:500px"></div>
<script type="text/javascript">
var startDocument = "Paper";
$('#documentViewer').FlexPaperViewer(
{ config : {
SWFFile : 'swf/aa.swf',
Scale : 0.6,
ZoomTransition : 'easeOut',
ZoomTime : 0.5,
ZoomInterval : 0.2,
FitPageOnLoad : true,
FitWidthOnLoad : false,
FullScreenAsMaxWindow : false,
ProgressiveLoading : false,
MinZoomSize : 0.2,
MaxZoomSize : 5,
SearchMatchAll : false,
InitViewMode : 'Portrait',
RenderingOrder : 'flash',
StartAtPage : '',
ViewModeToolsVisible : true,
ZoomToolsVisible : true,
NavToolsVisible : true,
CursorToolsVisible : true,
SearchToolsVisible : true,
WMode : 'window',
localeChain: 'en_US'
}}
);
</script>
</body>
</html>
转载自:http://my.oschina.net/u/872813/blog/206780
补充:windows下仿百度文库实现在线文档浏览
windows下开发仿百度的功能相对简单一些。只是java代码调用服务器windows上安装的软件,将doc等文件转化为swf文件。
由于在开发环境下flashpaper不支持64位的系统,所以用print2flash代替flashpaper,功能效果一样。
注:print2flash转化得到的swf文件用flexpaper无法显示。
java调用print2flash的代码如下:
String cmd = "F:/Program Files (x86)/Print2Flash3/p2fServer.exe E:/aa.doc E:/aa.swf";
try {
// 创建进程,并执行
Process pro = Runtime.getRuntime().exec(cmd);
pro.waitFor();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
- 转化后的swf文件只需要浏览器安装flashplayer插件就可以打开了,在页面标签内无需使用flexpaper这样的工具。页面调用swf文件代码如下:
<embed height="510" width="660" src="swf/aa.swf" loop="true" quality="1" type="application/x-shockwave-flash" />
转载自:http://my.oschina.net/u/872813/blog/201246?fromerr=aCsKh5yf
问题:
1. 在安装swftools时,如果出现
modules/.././types.h:39:2: 错误:#error "no way to define 64 bit integer"
modules/.././types.h:42:2: 错误:#error "don't know how to define 32 bit integer"
modules/.././types.h:45:2: 错误:#error "don't know how to define 16 bit integer"
modules/.././types.h:48:2: 错误:#error "don't know how to define 8 bit integer"
执行:ldconfig /usr/local/lib 然后重新执行./configure 和make然后make install
其他可能出现的问题:
可能是 缺少gcc或者g++
执行:yum install gcc-c++
最终可能出现的问题:
make[1]: *** [install] 错误 1
make[1]: Leaving directory `/opt/openoffice4/swftools-0.9.2/swfs'
make: *** [install] 错误 2
并不是所有电脑都出现该问题,google后给出的结果是还缺少其他依赖,但是已经不影响,在终端执行:pdf2swf出现相关信息,证明我们最终需要的命令pdf2swf已经可用。
特别注意编译器的安装,如gcc-c++等。
Linux下实现文档在线浏览的更多相关文章
- Java模拟实现百度文档在线浏览
Java模拟实现百度文档在线浏览 这个思路是我参考网上而来,代码是我实现. 采用Apache下面的OpenOffice将资源文件转化为pdf文件,然后将pdf文件转化为swf文件,用FlexPaper ...
- sharepoint 2013 office web app 2013 文档在线浏览 IE11 浏览器不兼容解决方法
昨晚配置完成office web apps 2013的外部网络访问之后,今天发现了一个很奇怪的问题,就是IE 11不支持文档在线浏览,找了很多方法,打补丁什么的,都不管用,最后在预览文件的页面,看到& ...
- FlexPaper实现文档在线浏览(附源码)
园子里也有关于FlexPaper的文章,但都不怎么详细. 没有较全的参数说明.就连官方网站都没有.没法,最后只得将swf文件反编译后查看了源码才将里面的参数全部弄出来. 好了,废话不多说,开始正题. ...
- Linux下查看文档指令
1,cat直接查看 cat /etc/profile 2,more,less分页查看 less /etc/profile more /etc/profile less -N /etc/profile ...
- linux下的文档处理及tar命令
1.使用cat命令进行纵向合并 使用‘>’是将左边的内容覆盖到右边 使用‘>>’是将左边的内容追加到右边文档中 还可使用‘>’将不同文件进行合并 2.管道符‘|’统计行数 使用 ...
- Java版office文档在线预览
java将office文档pdf文档转换成swf文件在线预览 第一步,安装openoffice.org openoffice.org是一套sun的开源office办公套件,能在widows,linux ...
- Java+FlexPaper+swfTools仿百度文库文档在线预览系统设计与实现
笔者最近在给客户开发文档管理系统时,客户要求上传到管理系统的文档(包括ppt,word,excel,txt)只能预览不允许下载.笔者想到了百度文库和豆丁网,百度文库和豆丁网的在线预览都是利用flash ...
- Print2flash在.NET(C#)64位中的使用,即文档在线预览
转:http://www.cnblogs.com/flowwind/p/3411106.html Print2flash在.NET(C#)中的使用,即文档在线预览 office文档(word,ex ...
- Java实现word文档在线预览,读取office文件
想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览. 一.使用openof ...
随机推荐
- jQuery 对象 与 原生 DOM 对象 相互转换
区别 jQuery 选择器得到的 jQuery对象 和 原生JS 中的document.getElementById() document.querySelector取得的 DOM对象 是两种不同类型 ...
- Python实现个性化推荐二
基于内容的推荐引擎是怎么工作的 基于内容的推荐系统,正如你的朋友和同事预期的那样,会考虑商品的实际属性,比如商品描述,商品名,价格等等.如果你以前从没接触过推荐系统,然后现在有人拿枪指着你的头,强迫你 ...
- sql随机数
) as P_jsnews_id ) as P_jsnews_id) * from P_jsnews order by newid()
- 将HTML页面页脚固定在页面底部(多种方法实现)
当一个HTML页面中含有较少的内容时,Web页面的footer部分随着飘上来,处在页面的半腰中间,给视觉效果带来极大的影响,接下来为大家介绍下如何将页脚固定在页面底部,感兴趣的朋友可以了解下 作为一个 ...
- 《剑指Offer》题一~题十
一.赋值运算符函数 题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString { public: CMyString(char *pData = nul ...
- 软工1816 · Alpha冲刺(3/10)
团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 完成了对laravel框架的一整套机制的了解,对后端的处理流程有全面的认识对整 ...
- 【IdentityServer4文档】- 整体情况
整体概况 大多数现代应用程序看起来或多或少像这样: 最常见的交互是: 浏览器与 Web 应用程序进行通信 Web 应用程序与 Web API 进行通信(有时是Web应用程序自己发起,有时代表用户发起) ...
- 软工网络15团队作业——Alpha阶段敏捷冲刺 DAY1
Alpha阶段敏捷冲刺 DAY1 1.各个成员在 Alpha 阶段认领的任务 姓名 在Alpha阶段所认领的任务 陈龙 题目生成类的编写,随机生成合理题目的算法编写 郑佳明 答案计算类的编写,对随机生 ...
- 常见设备在linux中的文件名
设备 linux中的文件名 IDE硬盘 /dev/hd[a-d] SATA/USB/SCSI/SAS /dev/sd[a-p] 软盘 /dev/fd[0-1] 打印机 25针:/dev/lp[0-2] ...
- 父类与子类的转换as,is
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...