我在这个论坛上看到了一些类似的问题,但那些都是针对 .NET
平台的,请不要将其关闭为重复问题。我有一个 Linux 系统,想通过 PHP 或 shell 脚本将幻灯片转换为图像(shell 脚本不太优先)。convert
命令可以将 PDF 转换为 JPG,但不能转换 PPT。
希望能得到任何帮助。
我在这个论坛上看到了一些类似的问题,但那些都是针对 .NET
平台的,请不要将其关闭为重复问题。我有一个 Linux 系统,想通过 PHP 或 shell 脚本将幻灯片转换为图像(shell 脚本不太优先)。convert
命令可以将 PDF 转换为 JPG,但不能转换 PPT。
希望能得到任何帮助。
//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");
}
http://code.google.com/p/jodconverter/ 看起来已经具备了所有必要的构建块,甚至还有一个示例 webapp。
我们曾经成功地使用过旧版本的http://sourceforge.net/projects/jodconverter/,但是我真的想不起来细节了。
我认为这是不可能的。使用.NET意味着用户正在创建一个PowerPoint应用程序的实例,并要求将特定幻灯片打印为JPG或PDF,但在PHP的情况下,我不认为从Linux系统中可以实现。
如果您可以使用Windows服务器,则可以使用PHP的COM接口创建COM应用程序并启动已安装的PowerPoint应用程序,并执行相同的操作,只要COM组件公开必要的方法(可能是PRINT())
祝你好运
从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);
?>
嗨,你需要在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;
?>