如何在PHP中将PPT幻灯片转换为JPEG图像

8

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

希望能得到任何帮助。


你可以尝试编写 OpenOffice Impress 脚本,因为它可以读取(一些)PPT并呈现它们,但要获得与 Powerpoint 本身类似的结果将是难以预测的。 - Marc B
请澄清:*.ppt(可能可行)还是*.pptx(几乎不可能)? - Eugen Rieck
6个回答

3
我先将PowerPoint文件转换为PDF格式,这需要在我的服务器上安装LibreOffice。之后,使用ImageMagick轻易地将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

你说pptx不可能吗?这个项目是做什么的? - prongs
它使用[Open|Libre]Office,这并不能可靠地加载.pptx文件。 - Eugen Rieck

1

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

如果您可以使用Windows服务器,则可以使用PHP的COM接口创建COM应用程序并启动已安装的PowerPoint应用程序,并执行相同的操作,只要COM组件公开必要的方法(可能是PRINT())

祝你好运


嗯,那我想我需要要求我的网站用户上传预先转换好的PDF文件。 - prongs

1

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

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

将PPT(或PPTX)文件提交进行转换为JPEG的代码如下(更多信息请参见文档):

<?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);
?>

0
一个 .pptx 文件只是一个压缩文件。所以,要获取 .jpeg 文件,您需要做的就是解压缩文件,然后使用 .jpeg 文件:
然后,图像文件夹位于 \ppt\media\ 文件夹中。 https://www.php.net/manual/en/ziparchive.extractto.php 提供了用于提取压缩文件的 PHP 代码。

0

嗨,你需要在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;

?>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接