一、 基本介紹
在線預覽的總體思路:實驗室承接了一個網站開發項目,甲方提出需要一個文檔在線預覽需求。經過討論,由於swf類型的文檔是直接能在瀏覽器中查看的,初步設想是利用openoffice將word類型轉變爲pdf文件,然後利用swftools工具將pdf轉爲swf類型。
WordPress:一個以php開發的博客類型網站構架,功能比較全面。
OpenOffice:一套跨平臺的辦公室軟件套件,在實現在線預覽功能中,我們主要使用其中的一個com組件來進行轉換。
SWFTools:一個多類型轉換工具,我們利用這個將pdf轉變爲swf。
二、 安裝及應用代碼
OpenOffice和SWFTools的安裝比較簡單,按照軟件提示步驟走就行。
安裝完畢後,在wp-admin/includes/file.php(具體哪個文件根據你自己的項目開發來定)裏添加如下兩個函數:
function word2pdf($doc_url,$output_url){
$osm = newCOM("com.sun.star.ServiceManager")
ordie ("Please be sure that OpenOffice.org is installed.\n");
$args= array(MakePropertyValue("Hidden",true,$osm));
$oDesktop= $osm->createInstance("com.sun.star.frame.Desktop");
$oWriterDoc= $oDesktop->loadComponentFromURL($doc_url,"_blank", 0,$args);
$export_args=array(MakePropertyValue("FilterName","writer_pdf_Export",$osm));
$oWriterDoc->storeToURL($output_url,$export_args);
$oWriterDoc->close(true);
}
function pdf2swf($pdf_url, $swf_url){
$re='';
$command= '"E:\swftools\pdf2swf.exe" -t "'.$pdf_url.'" -sflashversion=9 -o "'.$swf_url.'"';
exec($command,$re,$re);}
然後在你項目的對應位置調用這兩個函數進行轉換即可,一般也是在file.php文件中的wp_handle_upload函數內進行調用,放在上傳成功後進行處理。在這裏需要注意填寫正確的路徑。
三、 問題解決
(1)權限分配問題
問題往往不會這麼簡單就能解決,一般在安裝openoffice中會遇到一個權限分配的問題。剛開始,我們在安裝了openoffice後發現調用其組件com.sun.star.ServiceManager往往會失敗,問了很久度娘,才發現問題的解決方案:
打開系統“組件服務”-》計算機-》我的電腦-》DCOM配置-》OpenOfficeService Manager (Ver 1.0),鼠標右鍵打開,更改安全設置,在“安全”裏將所有權限都更改爲“自定義”,這裏包括“啓動和激活權限”、“訪問權限”、“配置權限”都更改爲“自定義”,這裏雖然看起來“配置權限”似乎不需要改。然後點擊“編輯”-》“添加”-》“高級”-》“立即查找”,找到Everyone成員,添加後,賦予其全部權限。這樣將“啓動和激活權限”、“訪問權限”、“配置權限”都添加了Everyone用戶後,再點擊“標識”,選擇交互式用戶,重啓下電腦即可解決問題。
(2)在Windows Server 2008或Windows7下將openoffice註冊到服務裏
如果沒有把openoffice註冊爲自動啓動的服務的話,每一次重啓系統可能都需要手動輸入命令soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 來添加到服務裏。網上以前的資料都是利用windows server 2003 resource kit來進行,但是對於WindowsServer 2008或Windows7這個小工具並不兼容。最終解決辦法仍然是利用了windows server 2003 resource kit,不過只是利用了其中的一個叫srvany.exe的小程序。解決方法:
1. 下載windowsserver 2003 resource kit,由於版本兼容問題,此版本不能使用,需要的是其中一個文件。點擊安裝,將srvany.exe複製到服務器的某個位置。
2. 控制檯cmd輸入:sc create"openofficeserver" binPath= "\"C:\Program Files\OpenOffice.org 4\program\soffice.exe\" -headless-accept=\"socket,host=127.0.0.1,port=8100;urp;\"-nofirststartwizard" DisplayName= "OpenOffice 3.4.1 Server"start= auto
3. 打開註冊表regedit,找到
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\openofficeserver
1. 複製ImagePath的值到txt文檔,然後將ImagePath修改爲srvany.exe所在的位置的值,如"c:\somepathto\srvany.exe"。
2. 新建一個項(key),命名爲Parameters。這個類似於一個文件夾。在Parameters裏新建一個字符串值Application,值爲剛剛拷貝到txt文檔裏的原來的ImagePath值。
3. 在服務裏找OpenOffice 3.4.1 Server服務,啓動,如果能成功啓動表示設置成功。
最後成果圖: