Как преобразовать слайд ppt в изображения jpeg в php

Я видел несколько похожих вопросов на этом форуме, но все они были для платформы .NET, поэтому, пожалуйста, не закрывайте их как повторяющиеся. У меня есть система Linux, и я хочу преобразовать слайд в изображения с помощью php или сценария оболочки (менее предпочтительно). команда convert может конвертировать pdf в jpg, но не в ppt.

Любая помощь будет здорово.


person prongs    schedule 04.01.2012    source источник
comment
Вы можете попробовать создать сценарий OpenOffice Impress, так как он может читать (некоторые) PPT и отображать их, но получение результатов, аналогичных тому, что выдает сам Powerpoint, будет удачным.   -  person Marc B    schedule 04.01.2012
comment
Пожалуйста, уточните: *.ppt (возможно выполнимо) или *.pptx (почти невозможно)   -  person Eugen Rieck    schedule 04.01.2012


Ответы (6)


Я не думаю, что это возможно. Использование .NET означает, что пользователь создает экземпляр приложения PowerPoint и просит его распечатать определенный слайд в формате JPG или PDF, но в случае с PHP я не думаю, что это возможно из системы Linux.

Если вы можете перейти на сервер Windows, вы можете использовать COM-интерфейс PHP для создания COM-приложения и запуска установленного приложения PowerPoint и делать то же самое, пока COM-компонент предоставляет необходимые методы (возможно, PRINT ( ))

Удачи

person Mathieu Dumoulin    schedule 04.01.2012
comment
Хм. Думаю, тогда мне нужно попросить пользователей моего сайта загрузить предварительно преобразованный PDF. - person prongs; 05.01.2012

Я смог добиться этого, сначала преобразовав файл 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");

            }
person Ayokunle Akinboboye    schedule 24.04.2019

http://code.google.com/p/jodconverter/, кажется, все построено блоки на месте, есть даже образец веб-приложения.

Некоторое время назад мы успешно использовали старую версию на http://sourceforge.net/projects/jodconverter/. , но я действительно не могу вспомнить подробности.

person Eugen Rieck    schedule 04.01.2012
comment
Вы сказали, что pptx невозможен? что делает этот проект? - person prongs; 05.01.2012
comment
Он использует [Open|Libre]Office, который на самом деле не может надежно загружать файлы .pptx. - person Eugen Rieck; 05.01.2012

привет, вам нужно включить COM в php.ini, тогда вы можете попробовать это

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

?>

person BourneShady    schedule 18.05.2016

Из сценария оболочки вы можете использовать Unoconv, который представляет собой простую оболочку командной строки для LibreOffice, что позволит вам конвертировать в приемлемое качество.

Для решения с более высоким качеством вывода, которое можно вызывать непосредственно из PHP (и в Linux), вы можете использовать специальный API преобразования файлов, такой как Замзар.

Код для отправки файла 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);
?>
person Chris Whyley    schedule 03.11.2017

Файл .pptx — это просто заархивированный файл. Итак, все, что вам нужно сделать, чтобы получить файлы .jpeg, — это разархивировать файл, а затем использовать файлы .jpeg:

Тогда папка с файлами изображений находится в папке \ppt\media\.

https://www.php.net/manual/en/ziparchive.extractto.php предоставляет php-код для извлечения заархивированного файла.

person Graham Peaden    schedule 29.08.2020