手把手教你用PHP打造一款Word轉(zhuǎn)HTML的程序
原創(chuàng)【51CTO.com原創(chuàng)稿件】在一些特殊場景,用戶需要展示的數(shù)據(jù)不是手動輸入的純文本或者手動編輯的富文本內(nèi)容,而是通過上傳Word文件形成生成***需要在APP上顯示的HTML內(nèi)容,也就是將上傳的Word文件轉(zhuǎn)換為***顯示的HTML文件,那么面對這樣的需求,我們應(yīng)該怎么辦呢?
業(yè)務(wù)場景
應(yīng)朋友的請求,本次需要完成的功能如上圖,從上圖我們能夠看到,首先從管理后臺上傳WORD文件,然后后端腳本對這個WORD文件進行轉(zhuǎn)換操作,將其轉(zhuǎn)換為HTML文件,然后將這個HTML文件保存在某個目錄下面,***手機APP里面直接顯示這個HTML文件就可以了,換句話說,就是將WORD文件轉(zhuǎn)換為HTML文件,并且這個HTML文件兼容HTML5標準,從而能夠讓APP能夠盡可能的、友好的顯示這個HTML文件。
目前主要的解決方案
目前能夠完成WORD文件轉(zhuǎn)HTML的第三方庫或者軟件很多,不過最常用的有兩種:Apache OpenOffice和LibreOffice,這兩種方案的***優(yōu)點就是跨平臺型比較強,也就是它們都提供了關(guān)于Windows、Linux、Mac OS操作系統(tǒng)的版本,這樣我們就能夠放心的使用了,盡可能的減少移植代碼成本,在此,我選擇的是LibreOffice這種解決方案。
環(huán)境介紹
進行本次開發(fā)的本地環(huán)境如下:
OS:Windows 10
PHP:7.1以上
MySQL:5.6以上
WEB SERVER:Apache 2.4
PHP Framework:LV框架
IDE:PhpStorm
服務(wù)器環(huán)境介紹:
OS:Ubuntu
PHP:***版
MySQL:***版
WEB SERVER:Nginx
安裝LibreOffice環(huán)境
由于本地環(huán)境是Windows環(huán)境,所以我僅僅需要下載Windows版本的軟件包進行安裝就可以了,而該版本的軟件就是一個exe文件,所以安裝很簡單,僅僅需要像安裝一般的軟件一樣點擊下一步下一步就可以完成整個安裝。
用命令行進行轉(zhuǎn)換
其實將Word文件轉(zhuǎn)換為HTML文件,主要用到的是LibreOffice這個安裝目錄下面的soffice.exe文件,下圖是我本地的文件路徑。
下面我新建一個目錄,用于測試轉(zhuǎn)換,新建目錄、轉(zhuǎn)換文件和轉(zhuǎn)換命令、轉(zhuǎn)換結(jié)果等到參考下面的截圖。
剛剛開始僅僅就一個20170818.docx文件,下面我們將在這個目錄下面生成一個html文件。
經(jīng)過上面的運行,我們能夠看到生成了一個20170818.html的HTML文件,主要應(yīng)用的命令:”soffice.exe --convert-to html --outdir HTML文件保存目錄 要轉(zhuǎn)換的文件名”。
用PHP代碼進行轉(zhuǎn)換
上面我們已經(jīng)用命令行的方式驗證了,能夠成功將Word文件轉(zhuǎn)換為HTML文件,由于我們的環(huán)境是PHP腳本,所以需要用PHP調(diào)用soffice.exe文件進行轉(zhuǎn)換,那么在PHP中調(diào)用這些執(zhí)行程序的函數(shù)有:shell_exec、exec、system、passthru等等,下面是我用LV實現(xiàn)的轉(zhuǎn)換為HTML的代碼片段。
還有一個需要解決的問題
雖然上面我已經(jīng)成功用PHP來實現(xiàn)后臺上傳的Word文件轉(zhuǎn)換為HTML文件保存起來,但是還有一個致命的問題,就是轉(zhuǎn)換后的HTML文件不能夠自適應(yīng),這就導致這個頁面在APP里面打開的時候,顯示效果非常糟糕,甚至會出現(xiàn)橫向滾動條,圖片的右下角開始顯示文本等等,于是為了解決這個問題,我不得不將生成的HTML文件內(nèi)容讀取出來,然后在里面添加各種各樣的HTML標簽和CSS屬性,參考下面的代碼。
同時還有一點需要說明的是,對于Word文件里面的圖片,轉(zhuǎn)換為HTML文件的時候是經(jīng)過base64編碼的。
一個潛在的性能問題
由于轉(zhuǎn)換Word到HTML文件的時候,腳本執(zhí)行時間或許會很長,所以如果有很多Word文件或者同時有很多用戶進行Word文件的轉(zhuǎn)換,這個時候就不太建議上傳之后就轉(zhuǎn)換,而是將轉(zhuǎn)換交由單獨的主機或者單獨的進程來進行,而后端上傳成功之后僅僅將轉(zhuǎn)換任務(wù)添加到消息隊列里面就可以了。
一些附加的注意事項
由于轉(zhuǎn)換時間或許長、上傳的Word文件或許很大,所以我們需要做好一些PHP配置選項的設(shè)置,比如腳本***執(zhí)行時間、文件***上傳大小、POST***上傳大小等等。
【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】