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:
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.
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