Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
风格与风格;从PHPPresentation中的pptx创建新pptx时,不会复制布局_Php_Powerpoint_Phpoffice_Phppresentation - Fatal编程技术网

风格与风格;从PHPPresentation中的pptx创建新pptx时,不会复制布局

风格与风格;从PHPPresentation中的pptx创建新pptx时,不会复制布局,php,powerpoint,phpoffice,phppresentation,Php,Powerpoint,Phpoffice,Phppresentation,我想将一个pptx文件的幻灯片拆分为单独的pptx文件,每个文件包含一张幻灯片。复制内容/文本,但不复制布局和样式。这是代码 有人能帮忙吗 <?php use PhpOffice\PhpPresentation\PhpPresentation; use PhpOffice\PhpPresentation\IOFactory; use PhpOffice\PhpPresentation\Style\Color; use PhpOffice\PhpPresentation\Style\A

我想将一个pptx文件的幻灯片拆分为单独的pptx文件,每个文件包含一张幻灯片。复制内容/文本,但不复制布局和样式。这是代码

有人能帮忙吗

<?php 

use PhpOffice\PhpPresentation\PhpPresentation;
use PhpOffice\PhpPresentation\IOFactory; 
use PhpOffice\PhpPresentation\Style\Color;
use PhpOffice\PhpPresentation\Style\Alignment;
use PhpOffice\PhpPresentation\Slide\SlideLayout;

 $objReader = \PhpOffice\PhpPresentation\IOFactory::createReader('PowerPoint2007');
 $objPHPPowerPoint = $objReader->load('a.pptx');

 $totalSlides = $objPHPPowerPoint->getSlideCount();
 $oMasterSlide = $objPHPPowerPoint->getAllMasterSlides()[0];

 $documentProperties =  $objPHPPowerPoint->getDocumentProperties();

 for ( $count = 0; $count < $totalSlides; $count++ ) {

     $objPHPPresentation = new PhpPresentation();
     $slide = $objPHPPowerPoint->getSlide(  $count );
     $background = $slide->getBackground();

     $newSlide = $objPHPPresentation->addSlide( $slide );
     $newSlide->setBackground ( $background );

     $objPHPPresentation->setAllMasterSlides(  $oMasterSlide );
     $objPHPPresentation->removeSlideByIndex(0);

     $oWriterPPTX = \PhpOffice\PhpPresentation\IOFactory::createWriter($objPHPPresentation, 'PowerPoint2007');
     $oWriterPPTX->save($count.'.pptx');

}

我不认为这是您的代码的问题,更重要的是底层库的问题,正如这里提到的:

它运行了一个测试,看看它是否是我可以复制的东西——我能够复制。我测试的关键区别在于一个演示文稿中我有一个简单的背景,而另一个演示文稿中我有一个渐变

此幻灯片导致了以下问题:

但这一条被复制得太好了:

在更复杂的背景下,我遇到了如下错误:

PHP警告:imagecreatefromstring():数据的格式不可识别

我的代码甚至没有你的代码复杂,我只需克隆原始幻灯片,并在保存前删除除单个幻灯片以外的所有幻灯片:

for ( $count = 0; $count < $totalSlides; $count++ ) {
    $copyVersion = clone $objPHPPowerPoint;
    foreach ($copyVersion->getAllSlides() as $index => $slide) {
        if ($index !== $count) {
            $copyVersion->removeSlideByIndex($index);
        }
    }

    $oWriterPPTX = \PhpOffice\PhpPresentation\IOFactory::createWriter($copyVersion, 'PowerPoint2007');
    $oWriterPPTX->save($count.'.pptx');
}
for($count=0;$count<$totalSlides;$count++){
$copyVersion=克隆$objPHPPowerPoint;
foreach($copyVersion->getAllSlides()作为$index=>$slide){
如果($index!==$count){
$copyVersion->removeSlideByIndex($index);
}
}
$oWriterPPTX=\PhpOffice\PhpPresentation\IOFactory::createWriter($copyVersion,'PowerPoint2007');
$oWriterPPTX->save($count.'.pptx');
}

很抱歉,如果这不能完全解决您的问题,但希望它能帮助您确定问题发生的原因。我链接到的另一个答案有更多关于在幻灯片中查找不受支持的图像类型的信息。

我认为这不是您的代码的问题,而是底层库的问题,如下所述:

它运行了一个测试,看看它是否是我可以复制的东西——我能够复制。我测试的关键区别在于一个演示文稿中我有一个简单的背景,而另一个演示文稿中我有一个渐变

此幻灯片导致了以下问题:

但这一条被复制得太好了:

在更复杂的背景下,我遇到了如下错误:

PHP警告:imagecreatefromstring():数据的格式不可识别

我的代码甚至没有你的代码复杂,我只需克隆原始幻灯片,并在保存前删除除单个幻灯片以外的所有幻灯片:

for ( $count = 0; $count < $totalSlides; $count++ ) {
    $copyVersion = clone $objPHPPowerPoint;
    foreach ($copyVersion->getAllSlides() as $index => $slide) {
        if ($index !== $count) {
            $copyVersion->removeSlideByIndex($index);
        }
    }

    $oWriterPPTX = \PhpOffice\PhpPresentation\IOFactory::createWriter($copyVersion, 'PowerPoint2007');
    $oWriterPPTX->save($count.'.pptx');
}
for($count=0;$count<$totalSlides;$count++){
$copyVersion=克隆$objPHPPowerPoint;
foreach($copyVersion->getAllSlides()作为$index=>$slide){
如果($index!==$count){
$copyVersion->removeSlideByIndex($index);
}
}
$oWriterPPTX=\PhpOffice\PhpPresentation\IOFactory::createWriter($copyVersion,'PowerPoint2007');
$oWriterPPTX->save($count.'.pptx');
}

很抱歉,如果这不能完全解决您的问题,但希望它能帮助您确定问题发生的原因。我链接到的另一个答案提供了有关在幻灯片中查找不支持的图像类型的更多信息。

如果这类似于phpOffice\phpspreadsheet,那么您可能需要显式复制原始幻灯片的样式并将其应用于新幻灯片,可能会有各种样式生效。如果您可以输出原始工作表的内容和样式,则开始使用正确的功能交叉检查文档,以复制可能是一个开始的内容。如果这类似于phpOffice\phpspreadsheet,则您可能需要从原始工作表显式复制样式,并将其应用于新幻灯片,有各种各样的风格可以发挥作用。如果您可以输出原始工作表的内容和样式,然后开始使用正确的函数交叉检查文档,以复制可能是一个开始。因此,如果我将php版本降级为7.1,那么它将工作?我认为这与php版本无关,只是一些库不太擅长处理复杂的幻灯片图形。当然,我可能错了,也许这是最近引入PHPPresentation的东西。然而,在一些情况下,人们也会遇到类似的问题,即风格丧失:在我的情况下,即使是简单的幻灯片也不会被复制。这就是我在这里担心的原因。这里是示例pptx文件,这是我复制后得到的文件。您可以尝试使用基本副本,如
$copyVersion=clone$objPHPPowerPoint$oWriterPPTX=\PhpOffice\PhpPresentation\IOFactory::createWriter($copyVersion,'PowerPoint2007')$oWriterPPTX->save($count.'.pptx')?所以如果我将php版本降级到7.1,那么它会工作吗?我认为这与php版本无关,只是一些库不太擅长处理复杂的幻灯片图形。当然,我可能错了,也许这是最近引入PHPPresentation的东西。然而,在一些情况下,人们也会遇到类似的问题,即风格丧失:在我的情况下,即使是简单的幻灯片也不会被复制。这就是我在这里担心的原因。这里是示例pptx文件,这是我复制后得到的文件。您可以尝试使用基本副本,如
$copyVersion=clone$objPHPPowerPoint$oWriterPPTX=\PhpOffice\PhpPresentation\IOFactory::createWriter($copyVersion,'PowerPoint2007')$oWriterPPTX->save($count.'.pptx')