首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用COM和PHPPowerpoint在PHP中合并/创建powerpoint幻灯片

使用COM和PHPPowerpoint在PHP中合并/创建powerpoint幻灯片
EN

Stack Overflow用户
提问于 2014-04-21 09:41:49
回答 2查看 4K关注 0票数 1

我的要求是拆分ppt/pptx文件,然后合并特定的幻灯片。

我已经成功地使用PHP将ppt/pptx文件分割成单独的幻灯片。现在,我想加入/合并幻灯片使用一些PHP库。

然而,除了PHPPowerpoint之外,似乎没有其他的。

我可以使用PHPPowerpoint创建幻灯片和添加文本节点/图像,但它不能读取现有的. .ppt/pptx文件并创建合并的输出。

还有别的办法吗?任何帮助我都会感激的。

编辑:我能够合并幻灯片,但没有正确地..。背景色/排序顺序仍然缺失。请帮助,因为除本连结外,本网页并无任何参考资料-

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

这是密码-

代码语言:javascript
复制
        //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!";

请任何人运行代码并找到为什么背景没有出现在合并幻灯片中吗?已经谢谢了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-25 07:32:30

已解决:

我遵循这个链接http://skp.mvps.org/pptxp001.htm并手动将VBA中的示例代码转换为PHP。基本上,InsertFromFile()方法不能正常工作,所以我按照MSDN (http://msdn.microsoft.com/en-us/library/office/ff746640%28v=office.15%29.aspx)使用了Copy()和Paste()方法。

票数 0
EN

Stack Overflow用户

发布于 2020-05-19 07:57:29

cristal/pptx完全可以完成您想要做的事情。它是一个纯PHP库,不依赖于Powerpoint,它可以读取现有的PPTX并按照原始格式操作幻灯片。

代码语言:javascript
复制
<?php

use Cristal\Presentation\PPTX;

$fooPPTX = new PPTX(__DIR__.'/asset/foo.pptx');
$barPPTX = new PPTX(__DIR__.'/asset/bar.pptx');

$fooPPTX->addSlides($barPPTX->getSlides());

$fooPPTX->saveAs(__DIR__.'/dist/result.pptx');

https://github.com/CristalTeam/pptx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23194739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档