1

我想将一个 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');

}
4

2 回答 2

0

我认为这不是您的代码的问题 - 更多的是底层库的问题 - 如此处所述:PhpPresentation imagecreatefromstring(): Data is not in a identify format - PHP7.2

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

这张幻灯片引起了问题: 这引起了问题

但是这个被复制得很好: 这很好用

随着更复杂的背景,我得到了如下错误:

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');
}

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

于 2020-09-08T17:51:52.810 回答
0

您可以尝试使用Aspose.Slides Cloud SDK for PHP将演示文稿拆分为单独的幻灯片并将它们保存为多种格式。您可以评估这个基于 REST 的 API,每月进行 150 次免费 API 调用,用于 API 学习和演示处理。以下代码示例向您展示如何使用 Aspose.Slides Cloud 拆分演示文稿并将幻灯片保存为 PPTX 格式:

use Aspose\Slides\Cloud\Sdk\Api\Configuration;
use Aspose\Slides\Cloud\Sdk\Api\SlidesApi;
use Aspose\Slides\Cloud\Sdk\Model;

$configuration = new Configuration();
$configuration->setAppSid("my_client_id");
$configuration->setAppKey("my_client_key");

$slidesApi = new SlidesApi(null, $configuration);

$filePath = "example.pptx";

// Upload the file to the default storage.
$fileStream = fopen($filePath, 'r');
$slidesApi->uploadFile($filePath, $fileStream);

// Split the file and save the slides in PPTX format in the same folder.
$response = $slidesApi->split($filePath, null, Model\SlideExportFormat::PPTX);

// Download files of the slides.
foreach($response->getSlides() as $slide) {
    $slideFilePath = pathinfo($slide->getHref())["basename"];
    $slideFile = $slidesApi->downloadFile($slideFilePath);

    echo $slideFile->getRealPath(), "\r\n";
}

有时需要在不使用任何代码的情况下拆分演示文稿。在这种情况下,您可以使用Online PowerPoint Splitter

我在 Aspose 担任支持开发人员。

于 2022-02-21T11:13:33.753 回答