1、實現原理思路
要實現 word 等文檔在線閱讀,需要將文檔轉換成 swf 的 flash 文件,然後結合 flexpaper ,在頁面上閱讀顯示。
這個轉換過程有些複雜,首先需要我們把上傳的文件轉換成 pdf 格式的文件,然後在把 pdf 格式的文件轉換爲 swf 的格式。這個轉換過程需要三個軟件:
openoffice 軟件可以把 word 等格式的文件轉換成 pdf
jodconverter 軟件是java 的開放文檔轉換器,實際上是 jodconverter 調用openoffice 軟件來轉換文件,用這個軟件還需要系統支持Java 環境,需要安裝Java JDK
swftools 的 pdf2swf 可以把 pdf 格式的文件轉換成 swf 格式
2、安裝軟件
系統環境:Ubuntu 12.04-server
下載軟件:
Java JDK (最好先安裝Java 環境,安裝openoffice 可能會用的,我是先安裝的 openoffice ,但是安裝時報個跟Java相關的錯誤,然後我用 apt-get install openoffice.org-java-common 這個就沒什麼問題了,如果先安裝Java,就不用在安裝這個了)
到這個地址去下載:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 找好相應的 Linux 版本,這裏我下載的 jdk-7u45-linux-x64.tar.gz 版本,然後解壓縮放到相應位置(我放到 /usr/java),然後修改系統的配置文件 /etc/environment ,將剛剛的Java 路徑添加的 PATH 裏面:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/java/bin"
要使剛剛的配置文件生效,需要執行下:source /etc/environment
這裏有片詳細的安裝文章,可以參考:http://www.cnblogs.com/fnng/archive/2013/01/30/2883815.html
openoffice 3.4.1 版本:
wget http://jaist.dl.sourceforge.net/project/openofficeorg.mirror/localized/zh-CN/3.4.1/Apache_OpenOffice_incubating_3.4.1_Linux_x86-64_install-deb_zh-CN.tar.gz
openoffice SDK
wget http://jaist.dl.sourceforge.net/project/openofficeorg.mirror/stable/3.4.1/Apache_OpenOffice_incubating-SDK_3.4.1_Linux_x86-64_install-deb_en-US.tar.gz
JODConverter
wget http://jaist.dl.sourceforge.net/project/jodconverter/JODConverter/2.2.2/jodconverter-2.2.2.zip
swftools 0.9.1 版本
wget http://www.swftools.org/swftools-0.9.1.tar.gz
3、安裝軟件
安裝順序爲Java JDK ,openoffice主程序,openoffice sdk,jodconverter(Java JDK的安裝參照上面)
第一步安裝 openoffice 主程序:
tar -zxvf Apache_OpenOffice_incubating_3.4.1_Linux_x86-64_install-deb_zh-CN.tar.gz 解壓縮
cd zh-CN/DEBS 進入到openoffice 的程序目錄
dpkg -i *.deb 安裝所有.deb 格式的文件
第二步安裝 openoffice sdk :
tar -zxvf Apache_OpenOffice_incubating-SDK_3.4.1_Linux_x86-64_install-deb_en-US.tar.gz 解壓縮文件
cd en-US/DEBS 進入到程序安裝文件目錄
dkpg -i *.deb 安裝deb 文件
安裝位置:openoffice 軟默認安裝在 /opt/openoffice 和 /opt/openoffice3 下面
啓動服務:/opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
可以用 netstat -a | grep 8100 命令來查看端口,或者 用 ps -ef|grep soffice 查看程序進程
然後將openoffice 設置爲開機啓動:
將 /opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard & 添加到 /etc/rc.local 文件裏
第三步安裝 jodconverter-2.2.2:
JODConverter其實不用安裝 解壓了就行,安裝了這個之後就已經可以實現DOC轉PDF了。
unzip jodconverter-2.2.2.zip 解壓
mv jodconverter-2.2.2 /opt 移動到 /opt 目錄下
接下來,就可以測試將doc xls pptx 等文件轉換爲 pdf 文件了:
java -jar /opt/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar /home/download/1.doc /home/download/1.pdf
但是現在還有一個問題,你會發現如果你轉換的是 中文的文檔,轉換完的pdf 文件會顯示亂碼,原因是openoffice 軟件沒有安裝中文字體:
解決方法:給 openoffice 軟件安裝 宋體、黑體等字體,可以直接打開你係統的 C盤的 C:\Windows\Fonts 目錄下面的 simsong.ttf simhei.ttf 等中文字體上傳到openoffice的字體目錄 /usr/share/fonts/truetype/openoffice 目錄下,即可
第四步安裝 swftools :
安裝 swftools 需要依賴 freetype、jpeglib 兩個類庫:
下載 freetype : wget http://ftp.twaren.net/Unix/NonGNU//freetype/freetype-2.4.12.tar.gz
下載 jpeglib : wget http://www.ijg.org/files/jpegsrc.v9.tar.gz
這兩個文件分別解壓縮後,進入文件夾,編譯源碼安裝即可:
tar -zxvf freetype-2.4.12.tar.gz
cd freetype-2.4.12
./configure
make
make install
jpegsrc.v9.tar.gz 安裝同 freetype
接下來安裝swftools :
tar -zxvf swftools-0.9.1.tar.gz
cd swftools-0.9.1
./configure
make
make install
swftools 安裝完成,接下來安裝swftools 的 xpdf 和 字體:
wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz
wget http://www.nginxs.com/download/font.zip
解壓 xpdf-chinese-simplified.tar.gz 和 font.zip 並修改配置文件
tar -zxvf xpdf-chinese-simplified.tar.gz
unzip font.zip
mv Gbsn00lp.ttf gkai00mp.ttf xpdf-chinese-simplified/CMap/
把 xpdf-chinese-simplified 移動到 /usr/share/xpdf
mkdir -p /usr/share/xpdf
mv xpdf-chinese-simplified /usr/share/xpdf
修改配置文件:
cd /usr/share/xpdf/xpdf-chinese-simplified
vim add-to-xpdfrc
將下面的內容覆蓋掉add-to-xpdfrc文件中相同的部分
cidToUnicode Adobe-GB1 /usr/share/xpdf/xpdf-chinese-simplified/Adobe-GB1.cidToUnicode
unicodeMap ISO-2022-CN /usr/share/xpdf/xpdf-chinese-simplified/ISO-2022-CN.unicodeMap
unicodeMap EUC-CN /usr/share/xpdf/xpdf-chinese-simplified/EUC-CN.unicodeMap
unicodeMap GBK /usr/share/xpdf/xpdf-chinese-simplified/GBK.unicodeMap
cMapDir Adobe-GB1 /usr/share/xpdf/xpdf-chinese-simplified/CMap
toUnicodeDir /usr/share/xpdf/xpdf-chinese-simplified/CMap
displayCIDFontTT Adobe-GB1 /usr/share/xpdf/xpdf-chinese-simplified/CMap/gkai00mp.ttf
OK swftools 現在已經安裝完成,可以轉換個pdf 文件測試下:
pdf2swf -o 1.swf -T -z -t1.pdf -s languagedir=/usr/share/xpdf/xpdf-chinese-simplified -s flashversion=9
OK 在PHP 程序中可以在上傳完成後,調用這兩個命令把文檔轉換爲最終的 swf 文件,前端頁面結合 flexpaper 顯示即可