最近花了几个星期的时间,折腾了一个在线文档网站,类似百度文库的功能,主要涵盖教育类文档。
测试的话是在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:
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这个玩意儿就行,可以直接运行命令测试:
- 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命令实现转换:
当添加下载地址完成后,捕捉到该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代码如下:
下面在某一目录(根据个人习惯)下创建doc2swf.php文件,代码如下:
这样就实现了文档上传自动转化为可通过flexpaper在线显示的swf文件格式了
- 本文固定链接: https://zxbcw.cn/post/1355/
- 转载请注明:必须在正文中标注并保留原文链接
- QQ群: PHP高手阵营官方总群(344148542)
- QQ群: Yii2.0开发(304864863)