Windows下實現php在線預覽功能

最近用到文檔在線預覽功能,以前沒接觸過,一切從零開始,整了一段時間終於實現,如今把方法分享給你們!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了。

   設置好後不要忘記重啓服務哦!

相關文章
相關標籤/搜索