Экспорт PPTx в PDF (проблема с использованием win32com или comtypes)

#python #powershell #pdf #powerpoint

Вопрос:

У меня возникли проблемы с выполнением части python (преобразование PPTx в PDF либо с помощью win32com, либо с помощью comtypes).:

 obj = win32com.client.Dispatch('Powerpoint.Application')
obj.Visible = 1
doc = obj.Presentations.Open(file_name_ptx)
doc.SaveAs(file_name_pdf, FileFormat=32)
 

Python отлично работает, если я запускаю его из CMD или даже в sublime или эквивалентном. Это также работает, если я запускаю его через запланированную задачу окна.

Однако он завершается неудачно, если он запускается через другой скрипт, например, из другого подпроцессорного python (либо с помощью POpen, либо с помощью Run) или из php (с помощью cmd_exe).

Он также завершается неудачно, если этот сценарий выполняется через «удаленный» запрос (с другого компьютера).

Сбой всегда происходит в одном и том же месте, скрипт не может открыть приложение PPTx:

 Traceback (most recent call last):
  File "C:ProgramDataAnaconda3libsite-packageswin32comclientdynamic.py", line 81, in _GetGoodDispatch
    IDispatch = pythoncom.connect(IDispatch)
pywintypes.com_error: (-2147221021, 'Operacixf3n no disponible', None, None)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "*******.PY", line 706, in 
    obj = win32com.client.Dispatch('Powerpoint.Application')
  File "C:ProgramDataAnaconda3libsite-packageswin32comclient__init__.py", line 95, in Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx)
  File "C:ProgramDataAnaconda3libsite-packageswin32comclientdynamic.py", line 98, in _GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:ProgramDataAnaconda3libsite-packageswin32comclientdynamic.py", line 83, in _GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch)
pywintypes.com_error: (-2147023584, 'Una sesixf3n de inicio especificada no existe. Es posible que haya finalizado.', None, None)
 

Я искал различные решения, я пробовал с различными модулями, я даже пытался создать файл PowerShell, который преобразует PowerPoint в PDF, и происходит то же самое, если я запускаю PS1 из CMD, он отлично работает, но если я запускаю его удаленно или через другой скрипт, он выходит из строя по той же причине, он не может открыть экземпляр PowerPoint.

Я также попытался удаленно сначала активировать графический интерфейс Windows (деактивировать экран блокировки пользователя и получить доступ, как если бы это был реальный человек), А затем выполнить любой сценарий (PY, PS1 и т. Д.), Но все равно при правильно открытом рабочем столе и без экрана блокировки пользователя сценарий завершается с ошибкой в точно такой же точке.

Кто-нибудь знает, в чем проблема и как ее решить? Спасибо.