首页 > 服务器 > CentOS > 帝国CMS在CentOS环境下实现在线文档网站(类似百度文库)
2014
11-07

帝国CMS在CentOS环境下实现在线文档网站(类似百度文库)

最近花了几个星期的时间,折腾了一个在线文档网站,类似百度文库的功能,主要涵盖教育类文档。

测试的话是在windows环境下,不细述,主要概述一下centos环境下的部署:

系统环境:CentOs6.2

web环境:apache2,mysql5,php5

CMS系统:帝国CMS(基于文档下载系统开发)

用到的工具:Openoffice 3.4.1 , pdf2swf tools, jodconverter , flexpaper

网上百度/谷歌来的资料,基本上都是用java来写的,如果在帝国CMS(PHP开发)中调用Servlet,比较繁琐,且效率较低,所以考虑用PHP代码来实现。大致思路参考了网上的资料:

实现步骤: 1. Office文件(doc/ppt/xls)上传   2. Office转成PDF   3. PDF转成SWF  4. 用Flexpaper显示SWF文件

基于对CentOS环境引入openoffice sdk + pdf2swf tool,分两个步骤,先利用openoffice sdk把文档统一转成pdf,然后利用pdf2swf tools把pdf转成swf

实现过程

要实现DOC转成PDF,在LINUX下面有OpenOffice可以实现。

那么首先需要的是安装Openoffice:

1.网上下载OpenOffice:选择Linux  x86-64 RPM简体中文版下载

2.解压:tar zvxf Apache_OpenOffice_incubating_3.4.1_Linux_x86-64_install-rpm_zh-CN.tar.gz

3.进入目录:cd zh-CN/RPMS

4.安装:rpm -ivh *.rpm --nodeps –force  安装后的默认目录是在:/opt/目录下面

5.启动服务:/opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

6.在CentOs下面会缺少黑体和宋体的,直接找到Windows下面的字体目录把黑体和宋体复制进去到如下目录:

/opt/openoffice.org/basis3.3/share/fonts/truetype/      需要重启后才会生效

接下来安装OpenOffice SDK3.3:

1.下载:选择Linux x86-64 RPM SDK下载

2.解压:tar zxvf OOo-SDK_3.4.1_Linux_x86-64_install-rpm_en-US.tar.gz

3.进入目录:cd en-US/RPMS/

4.安装:rpm -vih *.rpm

然后安装jodconverter.2.2.2,安装了这个之后就已经可以实现DOC转PDF了。

这个安装很简单,直接上网站下一个这个压缩文件回来。

解压,复制到一个目录里面去,就能直接用了,调用它里面的/lib/jodconverter-cli-2.2.2.jar这个玩意儿就行,可以直接运行命令测试:

  1. java -jar /usr/local/wenku/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar test.doc test.pdf

下面安装SWFTools:

中文支持安装:

mkdir –p /usr/local/share/xpdf
cd /usr/local/share/xpdf/
下载中文支持及字体库 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
mv Gbsn00lp.ttf gkai00mp.ttf xpdf-chinese-simplified/CMap/
cd /usr/share/xpdf/xpdf-chinese-simplified
编辑,加入新增的字体:vim add-to-xpdfrc  内容如下:
cidToUnicodeAdobe-GB1/usr/share/xpdf/chinese-simplified/Adobe-GB1.cidToUnicode
unicodeMapISO-2022-CN/usr/share/xpdf/chinese-simplified/ISO-2022-CN.unicodeMap
unicodeMapEUC-CN/usr/share/xpdf/chinese-simplified/EUC-CN.unicodeMap
unicodeMapGBK/usr/share/xpdf/chinese-simplified/GBK.unicodeMap
cMapDirAdobe-GB1/usr/share/xpdf/chinese-simplified/CMap toUnicodeDir/usr/share/xpdf/chinese-simplified/CMap
displayCIDFontTT Adobe-GB1 /usr/share/xpdf/chinese-simplified/CMap/gkai00mp.ttf

保存后退出

SwfTool安装:

cd /usr/local/wenku
wget http://www.swftools.org/swftools-0.9.1.tar.gz
tar zxvf swftools-0.9.1.tar.gz
cd swftools-0.9.1
./configure
make
make install

测试一下是否可用:pdf2swf -o /path/test.swf -T -z -t -f /path/test.pdf -s languagedir=/usr/share/xpdf/xpdf-chinese-simplified -s flashversion=9

如果测试成功,那么就已经OK一大半了,接下来就是显示的问题了。

最后用FlexPaper实现在线预览

这个是网上下载吧,模仿demo改下JS就行了,里面是用的JS读取SWF的路径,这个简单吧,不讲了。

最后在帝国CMS添加下载文件地址时,用Ajax异步提交调用PHP来调用LINUX命令实现转换:

70495B64E83203BCC3C05A26065B60CA_B500_900_500_26

当添加下载地址完成后,捕捉到该input失去焦点事件调用ajax实现文档转化功能:

1.在AddNews.php中找到<div id="TabPane1">,在下面添加一段js代码:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>

2.往下在

<?php
    include($modfile);
?>

之下添加js代码如下:

BB3104FB4298A01FD07F425FA22F47FE_B500_900_485_408

下面在某一目录(根据个人习惯)下创建doc2swf.php文件,代码如下:

1EEAF726043F6404A20C98F9DC3F7ED3_B500_900_500_210

这样就实现了文档上传自动转化为可通过flexpaper在线显示的swf文件格式了

编程技巧