最近用到文檔在線預覽功能,以前沒接觸過,一切從零開始,整了一段時間終於實現,如今把方法分享給你們!javascript
1、主要思路php
先將其餘格式的文檔(office文檔、txt、圖片等等)經過OpenOffice轉換成PDF格式文檔,而後經過swftools(http://www.swftools.org/)將PDF格式文檔轉換爲swf格式文檔,最後經過flexpaper顯示swf格式的文檔,從而實現預覽多種格式的文檔。java
使用到的工具本身從網上下載,很好找的。安全
2、實現過程less
1.其餘文檔轉爲PDFsocket
用命令啓動OpenOffice:工具
運行->cmd,輸入下面的命令flex
cd /d E:/openoffice/program & soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizardurl
或者在cmd中進入program目錄,而後輸入soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizardspa
php實現代碼:
set_time_limit(0);
function MakePropertyValue($name,$value,$osm){
$oStruct = $osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
$oStruct->Name = $name;
$oStruct->Value = $value;
return $oStruct;
}
function word2pdf($doc_url, $output_url){
$osm = new COM("com.sun.star.ServiceManager") or die ("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);
}
$doc_file = 'D:/wamp/www/onlineread/uploads/docfile.doc';
$output_file = 'D:/wamp/www/onlineread/uploads/pdffile.pdf';
$doc_file = "file:///" . $doc_file;
$output_file = "file:///" . $output_file;
word2pdf($doc_file,$output_file);
2.PDF轉換爲swf並顯示
php實現代碼:
$source='D:/wamp/www/onlineread/uploads/pdffile.pdf';
$convert='D:/wamp/www/onlineread/uploads/swffile.swf';
$command = "D:/wamp/www/onlineread/Public/swftools/pdf2swf.exe -t ".$source." -s flashversion=9 -o ".$convert;
$WshShell = new COM("WScript.Shell");
//執行cmd命令
$oExec= $WshShell->Run("cmd /C ". $command, 0, true);//若是轉換成功$oExec值爲0
swf顯示:
<div style="width:100%;height:800px;display:block;margin-left: auto;margin-right: auto; margin-top: 20px;">
<a id="viewerPlaceHolder" style="width:100%;height:800px;display:block;"></a>
<script type="text/javascript">
var path="/<?=$convert?>";//調用php的變量,若是不能實現可考慮下一句的寫法
//var path="/<?php echo $convert?>";
var fp = new FlexPaperViewer(
'__PUBLIC__/FlexPaper/FlexPaperFlash/FlexPaperViewer',
'viewerPlaceHolder', { config : {//配置參數,可自行修改爲本身想要的
SwfFile : escape(path),
Scale : 1,
ZoomTransition : 'easeOut',
ZoomTime : 0.5,
ZoomInterval : 0.2,
FitPageOnLoad : false,
FitWidthOnLoad : false,
PrintEnabled : true,
FullScreenAsMaxWindow : false,
ProgressiveLoading : false,
MinZoomSize : 0.2,
MaxZoomSize : 5,
SearchMatchAll : false,
InitViewMode : 'Portrait',
ViewModeToolsVisible : true,
ZoomToolsVisible : true,
NavToolsVisible : true,
CursorToolsVisible : true,
SearchToolsVisible : true,
localeChain: 'en_US'
}});
</script>
</div>
3.運行前的準備
須要先進行以下的設置,不然運行過程當中可能會出錯!
控制面板-管理工具-組件服務-計算機-個人電腦-DOCM配置,找到OpenOffice Service Manager(Ver 1.0)右鍵屬性,按下圖所示進行配置:
以下圖所示找到OpenOffice Service Manager(Ver 1.0):
在彈出框中選擇‘安全’,分別編輯‘啓動和激活權限’和‘訪問權限’:
在‘啓動和激活權限’彈出框中點擊添加,輸入Everyone:
設置Everyone的權限:
在‘訪問權限’的彈出框中點擊添加,輸入Everyone:
設置Everyone權限:
在屬性對話框中選擇‘標識’,選擇‘交互式用戶’:
若是遇到COM類實例化失敗的問題,打開php配置文件,去掉com.allow_dcom=true前面的分號,並添加extension=php_com_dotnet.dll,由於php5.4之後就不內嵌com了。
設置好後不要忘記重啓服務哦!