Я пытаюсь создать файл pptx на моем сервере из файла XML.XML-файл является действительным, и его можно открыть и сохранить как pptx, выполнив
- Щелкните правой кнопкой мыши
- Откройте с помощью
- Microsoft Office Powerpoint
Затем его можно сохранить как файл .pptx.
Теперь я хотел бы сделать это программно, или, по крайней мере, мой код выведет действительный файл pptx, а не просто файл XML, где яНужно изменить расширение файла вручную.
В настоящее время я делаю это через com_dotnet COM
Object
Класс COM позволяет создавать экземпляры OLE-совместимого COM-объекта, вызывать его методы и получать доступ к его свойствам.https://php.net/manual/en/class.com.php
ПРИМЕЧАНИЕ. $content
- это допустимое содержимое XML, $path
- правильный путь к файлу, а $filename
- правильное имя.Я проверил на них, и все они в порядке.
$document_xml = $path.$filename.".xml";
$document_pptx = $path.$filename.".pptx";
// writing content to xml file
$file = fopen($document_xml, "w");
fwrite($file, $content);
fclose($file);
// xml to pptx
$pptx = new COM("powerpoint.application") or die("Unable to instantiate Powerpoint");
$pptx->Visible = 1;
$pptx->Presentations->Open2007($document_xml, False, False, False) or die("Unable to open document");
$pptx->Presentations[1]->SaveAs($document_pptx);
// saved as pptx
$pptx->Presentations[1]->Close();
$pptx->Quit();
$pptx = null;
unlink($document_xml);
Моя проблема здесь в том, что эта конкретная часть кода уже давно доставляет мне головную боль, потому что автоматизация офиса на стороне сервера имеет некоторые недостатки: https://support.microsoft.com/en-us/help/257757/considerations-for-server-side-automation-of-office
- Сервер не позволяет мне получить доступ к Компоненту "Microsoft Porwerpoint Slide" без специальных прав, установленных в Компонентах-Сервис
- Сервер не может обрабатывать запросы или другое непредвиденное поведение, которое "всплывает", когдаоткрытие компонента на стороне сервера.В некоторых случаях для закрытия подсказки или предупреждения требуется настоящий щелчок мышью, чтобы действительно запустил вашу программу. * Еще 1035 *
- по ссылке выше
Мне нужно установить для идентификатора «Microsoft Powerpoint Slide» внутри Службы компонентов Windows Server конкретное имя пользователя / пароль, и все же иногда этот код просто решает, что он не будет работать.
Затем мне нужно перезапустить сервер или вручную завершить выполнение процессов Powerpoint на сервере.И это то, что я пытаюсь избежать здесь.
Исключение, которое он дает мне в этих случаях: Failed to create COM object 'Powerpoint.Application': Aufruf wurde durch Aufgerufenen abgelehnt.
, что переводится как "Вызов был отклонен вызываемым (объект)".
, который, очевидно, связан с идентификацией "Microsoft PowerpointСлайд "внутри Службы компонентов Windows Server" или неожиданное поведение при открытии серверной части компонента Powerpoint (например, всплывающие окна, требующие ручного ввода) (по крайней мере, это то, что я обнаружил до сих пор)
I 'Я ищу решение, которое делает то, что должен делать этот код, но без проблем.
Простое сохранение содержимого XML в файл .pptx не делает эту работу, так как у меня есть некоторые гиперссылки и другие вещи внутри этих слайдов pptx (ссылки с одного слайда на другой и т. Д.).Они будут работать только тогда, когда я сделаю этот метод выше или любой другой материал, который на самом деле ОТКРЫВАЕТ мой созданный XML-файл с помощью Powerpoint, а затем СОХРАНИТ это в файл .pptx.
Я был бы рад любой помощи.Заранее спасибо.