Adobe Acrobat API in Python

10,146

Consider interfacing with the AvDoc object as one of your links show its usage, and then build pdDoc and jsObject from it. Be sure to also wrap process in a try/except/finally block to effectively release COM objects regardless of error.

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
Share:
10,146

Related videos on Youtube

Schalton
Author by

Schalton

Engineer turned data junkie, still very much learning but thoroughly enjoy climbing the learning curve. Dabble in Civil Design & Analysis, Financial Modeling, MFO & Supply Chain Analytics -- even won my fantasy football league by programmatically selecting players.

Updated on September 12, 2022

Comments

  • Schalton
    Schalton over 1 year

    System:

    Python 3.6
    Windows 10
    

    Goal:

    Use the Adobe Acrobat API to use the "Save As" feature to save a pdf to jpegs.

    Note: For my purposes I cannot use Wand or other packages.

    Resources:

    Adobe_API_Documentation

    Implementation_Example 1

    Error_Handling_Issue

    VBA_Example

    Current Code:

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

    Issue:

    jsObject is Null

    Resulting in the following traceback:

    ---------------------------------------------------------------------------
    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'
    

    Error Documentation Notes:

    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.