Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2105522
  • 博文数量: 194
  • 博客积分: 6450
  • 博客等级: 准将
  • 技术积分: 2085
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-06 13:39
文章分类

全部博文(194)

文章存档

2013年(38)

2012年(11)

2011年(1)

2010年(1)

2009年(4)

2008年(13)

2007年(18)

2006年(63)

2005年(45)

我的朋友

分类: PHP

2013-01-16 10:31:54

缘起

由于项目需要开发了类似百度文库和DOCIN类似的Flash播放器读取上传文档的系统,虽然最终技术问题都得以解决,但开发的过程中走了不少弯路,浪费了不少时间,特别是FlexPaper去掉自带的Logo这一步上,前后花了几天才得以解决,郁闷的有点不想在事后整理这个文档。为了让自己更好的记下解决问题的关键点所在,让同样有此需求的开发人员避免浪费时间,少走一些弯路,打起精神整理本次开发过程的技术研究和技术实现过程。

 

基于Linux环境的技术选型

         项目基于Linux环境,如果你的服务器是windows,那么某些部分的技术选型跟本文可能会有出入,最主要的一个过程是把文档统一转成PDF,如果在Windows下可以考虑跳过,因为使用Flash Paper或者Print Flash可以把文档直接转成SWF。但这两者都不支持Linux环境。因此我们采用先把所有文档统一转成PDF,然后再转成SWF的方案。

 

主要技术点和步骤

     基于对Linux环境的支持考虑(当然Windows下也可以采用这种技术选型),团队讨论决定引入openoffice sdk + pdf2swf tool,分两个步骤,先利用openoffice sdk把文档统一转成pdf,然后利用pdf2swf toolpdf转成swf

     为了提高系统的反映速度并降低系统的耦合,主业务上传文档和文档转换流程采用异步处理(分开两个应用,降低耦合)、同时采用Concurrent多线程来处理文档转换(可以通过线程数的配置,统分利用cpu资源,提高并发处理速度,提高系统的反应时间),同时可以进一步扩展设计,以支持多台机器同时处理文档转换。

 

主要技术点实现

1.       Linux(CentOS5.3)下安装OpenOfficeOpenOffice SDK

OpenOffice安装:

1)下载了3.3版本的OpenOffice

2tar zxvf OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_zh-CN.tar.gz

弯路:解压后,发现目录下有个可执行的setup,大喜,心想肯定执行setup安装了。

执行后抛出错误1

错误信息No X11 DISPLAY variable was set”

心想直接到本机操作是否会不同,结果还是一样的错误。

有大致的信息说要设置DISPLAY系统变量,又设置

export DISPLAY=localhost:0.0

再次执行抛出错误2:

抛出异常Exception in thread "main" java.lang.UnsatisfiedLinkError: /var/tmp/install_28877/usr/java/jre1.6.0_22/lib/amd64/xawt/libmawt.so

按提示给安装相关的图形界面包

yum install libXp

yum install libXtst

yum install libXp-devel

yum install libXau-devel

再次setup,又回到No X11 DISPLAY variable was set报错,我就想了,是不是当时装操作系统时没装上x windows server

也没想太多,搜了google,安装XWindow 

yum  groupinstall "X Window System" 

yum groupinstall "GNOME Desktop Environment" 

yum install nc expect 

yum install freenx 

yum groupinstall chinese-support

不放心,装好后reboot,再次进行setup,还是同样的出错。血压都升高了,心里在想难道要进图形界面才能安装么,但我们服务器原则上不推荐使用图形界面,如果安装的openoffice需要在图形界面下运行,那有点偏移了最初的技术选型目的。看来setup方式在文本界面下已经走不下去了,再次问google去,这次发现了另外一种安装方法。

 

3 cd OOO330_m20_native_packed-1_zh-CN.9567/RPMS/

4rpm -ivh  *.rpm

5RPMS/desktop-integration

6rpm -ivh  openoffice.org3.3-redhat-menus-3.3-*.noarch.rpm

7/opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

前提:如果你没有安装jdk或者安装后没有把jdk/bin加入到PATH,则会报出找不到jre

vi /etc/profile,加入以下三行

export   JAVA_HOME=/usr/local/jdk1.6.0_17

export   PATH=$JAVA_HOME/bin:$PATH

export   CLASSPATH=$JAVA_HOME/lib/tools.jar:$CLASSPATH

 

8)查看服务是否运行正常

   netstat -ano 可以查看到8100端口被soffice服务占用

   ps aux|grep soffice 查看进程

 

OpenOffice SDK3.3安装:

1)  下载OpenOffice SDK3.3

2tar zxvf OOo-SDK_3.3.0_Linux_x86-64_install-rpm_en-US.tar.gz

3cd OOO330_m20_native_packed-1_en-US.9567/RPMS/

4rpm -vih *.rpm

 

 

2.Linux下安装pdf2swf Tool

中文支持安装:

1)  mkdir –p /usr/share/xpdf

cd /usr/share/xpdf/

2)  下载中文支持及字体库

wget  ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz

 

wget 

3 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

4vi add-to-xpdfrc

内容如下:

cidToUnicode   Adobe-GB1       /usr/share/xpdf/chinese-simplified/Adobe-GB1.cidToUnicode

unicodeMap     ISO-2022-CN    /usr/share/xpdf/chinese-simplified/ISO-2022-CN.unicodeMap

unicodeMap     EUC-CN             /usr/share/xpdf/chinese-simplified/EUC-CN.unicodeMap

unicodeMap     GBK           /usr/share/xpdf/chinese-simplified/GBK.unicodeMap

cMapDir            Adobe-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

保存后退出

 

相关Lib包安装:

1)  yum –y install gcc-c++(如果已安装可跳过)

2)  yum install giflib-devel.x86_64

3)  yum install zlib-devel.x86_64

4)  yum install freetype-devel.x86_64

5)  yum install libjpeg-devel.x86_64

 

SwfTool安装:

1cd /usr/local/

2wget 

3tar zxvf swftools-0.9.1.tar.gz

4cd swftools-0.9.1

5./configure

6make

7make install

8)测试一下是否可用

pdf2swf -o /path/output.swf -T -z -t -f /path/yourpdffile.pdf -s languagedir=/usr/share/xpdf/xpdf-chinese-simplified -s flashversion=9

小意外:

测试环境意外宕机重起后,运行pdf2swf,抛出错误:

pdf2swf: error while loading shared libraries: libjpeg.so.8: cannot open shared object file: No such file or directory

find了一遍,发现libjpeg.so.8被装到了/usr/local/lib下,这不是默认的/lib/usr/lib目录。问了下google,对于动态库的路径问题有以下三种解决方案

 

动态库的路径问题

为了让执行程序顺利找到动态库,有三种方法:

(1)把库拷贝到/usr/lib/lib目录下。

(2)LD_LIBRARY_PATH环境变量中加上库所在路径。例如动态库libhello.so/home/ting/lib目录下,以bash为例,使用命令:

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ting/lib

(3) 修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。这样,加入的目录下的所有库文件都可见。

本人使用了第2种办法,再次运行pdf2swf正常。


阅读(2146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~