代码之家  ›  专栏  ›  技术社区  ›  Schalton

Python中的Adobe Acrobat API

  •  2
  • Schalton  · 技术社区  · 6 年前

    系统:

    Python 3.6
    Windows 10
    

    目标:

    使用AdobeAcrobat API使用“另存为”功能将PDF保存到JPEGS。

    注:出于我的目的,我不能使用魔杖或其他包装。

    资源:

    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")
    

    问题:

    jsObjts 是Null吗

    导致以下追溯:

    ---------------------------------------------------------------------------
    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.
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Parfait    6 年前

    考虑与 AVDOC 对象作为链接之一显示其用法,然后生成 PDDOC jsObjts 从它。确保将进程包装在 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