Office Interop を使用してこのようなタスクを自動化することはできません。Microsoft の理由を参照してください。
https://support.microsoft.com/en-us/kb/257757
最善の方法は、API として使用するように設計された Aspose.Slides (ppt、pptx、強力な操作との互換性) などの強力なライブラリを使用することです。
NetPhp ライブラリを使用して、PHP から Aspose.Slides を使用できます。ここに例があります:
http://www.drupalonwindows.com/en/blog/powerpoint-presentation-images-php-drupal-example
関連するコードは次のとおりです。これには Drupal 固有のものがありますが、それがどのように機能するかを確認し、他の場所で動作させることができます。
protected function processFilePowerpoint(array $file, array &$files) {
/** @var \Drupal\wincachedrupal\NetPhp */
$netphp = \Drupal::service('netphp');
$runtime = $netphp->getRuntime();
$runtime->RegisterAssemblyFromFile("libraries/_bin/aspose/Aspose.Slides.dll", "Aspose.Slides");
$runtime->RegisterAssemblyFromFullQualifiedName("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing");
$destination = strtr(PresentacionSlide::UPLOAD_LOCATION, ['[envivo_presentacion:id]' => $this->entity->id()]);
file_prepare_directory($destination, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
$sourcefile = drupal_realpath($file['tmppath']);
$presentation = $runtime->TypeFromName("Aspose.Slides.Presentation")->Instantiate($sourcefile);
$format = $runtime->TypeFromName("System.Drawing.Imaging.ImageFormat")->Png;
$x = 0;
/** @var \NetPhp\Core\NetProxyCollection */
$slides = $presentation->Slides->AsIterator();
foreach ($slides as $slide) {
$x++;
$bitmap = $slide->GetThumbnail(1, 1);
$destinationfile = $destination . "\\slide_{$x}.png";
$bitmap->Save(drupal_realpath($destinationfile), $format);
$files[] = PresentacionSlide::fromFile($destinationfile);
}
$presentation->Dispose();
}