Ubuntu 伺服器 PHP實現word、excel、ppt、pdf 等文件線上閱讀功能的實現
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,就不用在安裝這個了)
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/java/bin"
要使剛剛的配置檔案生效,需要執行下:source /etc/environment
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 顯示即可