2014-04-21 245 views
1

我的要求是拆分ppt/pptx文件,然後合併特定的幻燈片。使用COM和PHP合併/創建PowerPoint幻燈片幻燈片

我已經使用PHP COM成功將ppt/pptx文件拆分爲單獨的幻燈片。現在我想使用一些PHP庫加入/合併幻燈片。

但是,似乎除了PHPPowerpoint之外似乎沒有一個。

我可以使用PHPPowerpoint創建幻燈片並使用它添加文本節點/圖像,但它無法讀取現有的.ppt/pptx文件並創建合併輸出。

還有別的辦法嗎?我將不勝感激任何幫助。

編輯: 我能夠合併幻燈片,但不正確..背景顏色/排序順序仍然缺失。請幫助,因爲有除了這個鏈接這個網站上的引用 -

http://msdn.microsoft.com/en-us/library/office/ff746640%28v=office.15%29.aspx

這裏是代碼 -

 //SET Max exec time 
     ini_set("max_execution_time",-1); 


     $directory = 'c:/ppt/slides/'; 
     $files_list = array_diff(scandir($directory,SCANDIR_SORT_DESCENDING), array('..', '.')); //Get list of all files from the sub slides folder 
     //var_dump($files_list); die; 
     $ppt_new = new COM("powerpoint.application") or die("Unable to instantiate Powerpoint 2"); 
     $ppt_new->Presentations->Add(true); //Create the new(merged) ppt 
     $dirpath = "C:/ppt/slides/";   
     $ppt_new->Presentations[1]->Slides->Add(1, 1); 
     foreach($files_list as $file) { //Loop through all slides to merge those 

     $powerpnt = new COM("powerpoint.application") or die("Unable to instantiate Powerpoint"); 
       echo "Adding slide..."; 
       echo $file_path1 = realpath($dirpath.$file); 

       $pres = $powerpnt->Presentations->Open($file_path1, false, false, false) or die("Unable to open the slide"); 
       echo $count = (int)$pres->Slides->Count."<--SLIDES COUNT<br>"; 
       $i=1; 
       foreach($pres->Slides as $slide) 

       { 
       try { 
        $pptLayout = $slide->CustomLayout; 
//     var_dump($pptLayout); die; 
//     $ppt_new->Presentations[1]->Slides[$i]->FollowMasterBackground = false; 
//     $ppt_new->Presentations[1]->Slides[$i]->Background = $slide->Background; 
        //$ppt_new->Presentations[1]->Slides->Layout = $pptLayout; 

        $ppt_new->Presentations[1]->Slides->InsertFromFile($file_path1, $i, $i, $i); 
        //   $ppt_new->Presentations[1]->SaveAs("merged11.ppt"); 
        //   $ppt_new->Export("created.ppt", "ppt"); 
        $i++; 
        } 
         catch(Exception $e) 
         { 
          echo 'Caught exception: ', $e->getMessage(), "\n"; 
         } 
       } 

     } 

     //Save the merged presentation 
     $powerpnt->quit(); 
     $ppt_new->Presentations[1]->SaveAs("c:\ppt\merged121.ppt"); 
     $ppt_new->Presentations[1]->Close(); 
     $ppt_new->quit(); 

     echo "Done!"; 

任何人都可以請運行該代碼,並發現爲什麼背景沒有進入合併幻燈片? 已經感謝。

+0

因爲PHPPowerPoint不能用於你想要的東西;它看起來像你必須使用COM(如果你在Windows服務器上),或者打開/自由辦公室與[PUNO](http://www.wstech2.net/index.php?do=0a,01 ,05) –

+0

@MarkBaker您可以使用COM提供示例嗎?我無法找到合併ppts的人 –

+0

我不使用COM,因此我不能舉一個例子:作爲PHPOffice套件庫(包括PHPPowerPoint)背後的開發團隊之一,我相信使用我自己的代碼,我還沒有任何需要合併幻燈片從 –

回答