Python 中的 Adobe Acrobat API
Adobe Acrobat API in Python
系统:
Python 3.6
Windows 10
目标:
使用 Adobe Acrobat API 使用 "Save As" 功能将 pdf 保存为 jpeg。
注意:出于我的目的,我不能使用 Wand 或其他包。
资源:
当前代码:
import winerror
import win32com
from win32com.client.dynamic import Dispatch, ERRORS_BAD_CONTEXT
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
my_dir = r"path\to\example\"
my_pdf = "example.pdf"
os.chdir(my_dir)
src = os.path.abspath(my_pdf)
pdDoc = Dispatch("AcroExch.PDDoc")
pdDoc.Open(src)
jsObject = pdDoc.GetJSObject()
jsObject.SaveAs(os.path.abspath('./output_example.jpeg'), "com.adobe.acrobat.jpeg")
问题:
jsObject 为空
导致以下追溯:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-9c82c454eb2a> in <module>()
----> 1 jsObject.SaveAs(os.path.abspath('./output_example.jpeg'), "com.adobe.acrobat.jpeg")
AttributeError: 'NoneType' object has no attribute 'SaveAs'
错误文档说明:
GetJSObject
Gets a dual interface to the JavaScript object associated with the PDDoc. This allows automation clients full access to both built-in and user-defined JavaScript methods available in the document. For more information on working with JavaScript, see Developing Applications Using Interapplication Communication.
Syntax
LDispatch* GetJSObject();
Returns
The interface to the JavaScript object if the call succeeded, NULL otherwise.
考虑与 AvDoc 对象连接,因为您的链接之一显示了它的用法,然后构建 pdDoc 和 jsObject 从它。确保还将进程包装在 try/except/finally
块中,以有效地释放 COM 对象,而不管错误如何。
import os
import winerror
from win32com.client.dynamic import Dispatch, ERRORS_BAD_CONTEXT
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
my_dir = r"C:\path\to\example\"
my_pdf = "example.pdf"
os.chdir(my_dir)
src = os.path.abspath(my_pdf)
try:
AvDoc = Dispatch("AcroExch.AVDoc")
if AvDoc.Open(src, ""):
pdDoc = AvDoc.GetPDDoc()
jsObject = pdDoc.GetJSObject()
jsObject.SaveAs(os.path.join(my_dir, 'output_example.jpeg'), "com.adobe.acrobat.jpeg")
except Exception as e:
print(str(e))
finally:
AvDoc.Close(True)
jsObject = None
pdDoc = None
AvDoc = None
系统:
Python 3.6
Windows 10
目标:
使用 Adobe Acrobat API 使用 "Save As" 功能将 pdf 保存为 jpeg。
注意:出于我的目的,我不能使用 Wand 或其他包。
资源:
当前代码:
import winerror
import win32com
from win32com.client.dynamic import Dispatch, ERRORS_BAD_CONTEXT
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
my_dir = r"path\to\example\"
my_pdf = "example.pdf"
os.chdir(my_dir)
src = os.path.abspath(my_pdf)
pdDoc = Dispatch("AcroExch.PDDoc")
pdDoc.Open(src)
jsObject = pdDoc.GetJSObject()
jsObject.SaveAs(os.path.abspath('./output_example.jpeg'), "com.adobe.acrobat.jpeg")
问题:
jsObject 为空
导致以下追溯:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-26-9c82c454eb2a> in <module>()
----> 1 jsObject.SaveAs(os.path.abspath('./output_example.jpeg'), "com.adobe.acrobat.jpeg")
AttributeError: 'NoneType' object has no attribute 'SaveAs'
错误文档说明:
GetJSObject
Gets a dual interface to the JavaScript object associated with the PDDoc. This allows automation clients full access to both built-in and user-defined JavaScript methods available in the document. For more information on working with JavaScript, see Developing Applications Using Interapplication Communication.
Syntax
LDispatch* GetJSObject();
Returns
The interface to the JavaScript object if the call succeeded, NULL otherwise.
考虑与 AvDoc 对象连接,因为您的链接之一显示了它的用法,然后构建 pdDoc 和 jsObject 从它。确保还将进程包装在 try/except/finally
块中,以有效地释放 COM 对象,而不管错误如何。
import os
import winerror
from win32com.client.dynamic import Dispatch, ERRORS_BAD_CONTEXT
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
my_dir = r"C:\path\to\example\"
my_pdf = "example.pdf"
os.chdir(my_dir)
src = os.path.abspath(my_pdf)
try:
AvDoc = Dispatch("AcroExch.AVDoc")
if AvDoc.Open(src, ""):
pdDoc = AvDoc.GetPDDoc()
jsObject = pdDoc.GetJSObject()
jsObject.SaveAs(os.path.join(my_dir, 'output_example.jpeg'), "com.adobe.acrobat.jpeg")
except Exception as e:
print(str(e))
finally:
AvDoc.Close(True)
jsObject = None
pdDoc = None
AvDoc = None