【问题标题】:Adobe Acrobat API in PythonPython 中的 Adob​​e Acrobat API
【发布时间】:2019-01-02 22:42:43
【问题描述】:

系统:

Python 3.6
Windows 10

目标:

使用 Adob​​e Acrobat API 使用“另存为”功能将 pdf 保存为 jpeg。

注意:出于我的目的,我不能使用 Wand 或其他软件包。

资源:

Adobe_API_Documentation

Implementation_Example 1

Error_Handling_Issue

VBA_Example

当前代码:

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.

【问题讨论】:

    标签: python acrobat win32com acrobat-sdk


    【解决方案1】:

    考虑与 AvDoc 对象交互,因为您的链接之一显示它的用法,然后从中构建 pdDocjsObject。请务必将进程包装在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      相关资源
      最近更新 更多