【问题标题】:How to convert ppt slide to jpeg images in php如何在php中将ppt幻灯片转换为jpeg图像
【发布时间】:2020-08-30 03:49:45
【问题描述】:

我在这个论坛上看到了一些类似的问题,但所有这些都是针对.NET 平台的,所以请不要将其关闭为重复。我有一个 linux 系统,我想通过 php 或 shell 脚本将幻灯片转换为图像(不太可取)。 convert 命令可以将 pdf 转换为 jpg,但不能转换为 ppt。

任何帮助都会很棒。

【问题讨论】:

  • 您可以尝试编写 OpenOffice Impress 脚本,因为它可以读取(一些)PPT 并渲染它们,但获得类似于 Powerpoint 本身将产生的结果将会被击中/错过。
  • 请澄清:*.ppt(可能可行)或*.pptx(几乎不可能)

标签: php powerpoint jpeg


【解决方案1】:

我能够通过首先将 powerpoint 文件转换为 pdf 来完成此操作。这需要我在我的服务器上安装 libre office。然后使用图像魔术轻松将 pdf 转换为图像。 这是我的一些代码。它使用https://github.com/ncjoes/office-converter(用于ppt到pdf的转换)和https://github.com/spatie/pdf-to-image(用于pdf到图像的转换)

  //now convert file to pdf
            $converter = new OfficeConverter($newFile);
            $result = $converter->convertTo('output.pdf');

            $pdfFile = BASE_PATH.'/output.pdf';
            //now convert pdf file to images
            chdir(BASE_PATH); 

            //get total number of pages in pdf file
            $pdf = new \Spatie\PdfToImage\Pdf($pdfFile);
            $pdf->setCompressionQuality(80);
            $pages = $pdf->getNumberOfPages();

            for($i=1;$i<=$pages;$i++){
                $pdf->setPage($i)->saveImage(BASE_PATH."/image$i.jpg");

            }

【讨论】:

    【解决方案2】:

    http://code.google.com/p/jodconverter/ 似乎已准备好所有构建块,甚至还有一个示例 web 应用程序。

    我们前段时间在http://sourceforge.net/projects/jodconverter/成功使用了旧版本,但是具体细节我实在记不住了。

    【讨论】:

    • 你说pptx不可能?这个项目是做什么的?
    • 它使用 [Open|Libre]Office,它不能真正可靠地加载 .pptx 文件
    【解决方案3】:

    我认为这是不可能的。使用 .NET 意味着用户正在创建一个 powerpoint 应用程序的实例并要求它将特定幻灯片打印为 JPG 或 PDF,但在 PHP 的情况下,我认为它不可能从 linux 系统中实现。

    如果你可以在 windows 服务器上运行,那么你可以使用 PHP 的 COM 接口来创建一个 COM 应用程序并启动一个已安装的 PowerPoint 应用程序并做同样的事情,只要 COM 组件公开了必要的方法(可能是 PRINT())

    祝你好运

    【讨论】:

    • 嗯。我想我需要让我网站的用户上传预先转换的 pdf。
    【解决方案4】:

    您可以在 shell 脚本中使用 Unoconv,它是一个简单的命令行包装器到 LibreOffice,它可以让您转换为合理的质量。

    对于可以直接从 PHP(和 Linux)调用的具有更高质量输出的解决方案,您可以使用专用的文件转换 API,例如 Zamzar

    提交 PPT(或 PPTX)文件以转换为 JPEG 的代码如下(更多信息在 documentation):

    <?php
    // Build request
    $endpoint = "https://api.zamzar.com/v1/jobs";
    $apiKey = "YOUR_KEY";
    $sourceFilePath = "/tmp/my.ppt"; // Or PPTX
    $targetFormat = "jpg";
    
    $sourceFile = curl_file_create($sourceFilePath);    
    $postData = array(
      "source_file" => $sourceFile,
      "target_format" => $targetFormat
    );
    
    // Send request
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $endpoint);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, $apiKey . ":");
    $body = curl_exec($ch);
    curl_close($ch);
    
    // Process response (with link to converted files)
    $response = json_decode($body, true);
    print_r($response);
    ?>
    

    【讨论】:

      【解决方案5】:

      您好,您需要在 php.ini 中启用 COM,然后您可以尝试一下

      <?php
      
      $ppApp = new COM("PowerPoint.Application");
      $ppApp->Visible = True;
      $strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"]))); // C:/AppServ/www/myphp
      $ppName = "MySlides.ppt";
      $FileName = "MyPP";
      //*** Open Document ***//
      $ppApp->Presentations->Open(realpath($ppName));
      //*** Save Document ***//
      $ppApp->ActivePresentation->SaveAs($strPath."/".$FileName,17);  //'*** 18=PNG, 19=BMP **'
      //$ppApp->ActivePresentation->SaveAs(realpath($FileName),17);
      $ppApp->Quit;
      $ppApp = null;
      

      ?>

      【讨论】:

        【解决方案6】:

        .pptx 文件只是一个压缩文件。因此,获取 .jpeg 文件所需要做的就是解压缩文件,然后使用 .jpeg 文件:

        那么图片文件所在的文件夹就在\ppt\media\文件夹下。

        https://www.php.net/manual/en/ziparchive.extractto.php 提供 php 代码来提取压缩文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-02-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-10
          • 2013-01-23
          相关资源
          最近更新 更多