相关疑难解决方法(0)

"未实现"使用pywin32控制Adobe Acrobat时出现异常

我已经使用pywin32在python中编写了一个脚本,将pdf文件保存到文本中,直到最近才能正常工作.我在Excel中使用类似的方法.代码如下:

def __pdf2Txt(self, pdf, fileformat="com.adobe.acrobat.accesstext"):
    outputLoc = os.path.dirname(pdf)
    outputLoc = os.path.join(outputLoc, os.path.splitext(os.path.basename(pdf))[0] + '.txt')

    try:
        win32com.client.gencache.EnsureModule('{E64169B3-3592-47d2-816E-602C5C13F328}', 0, 1, 1)
        adobe = win32com.client.DispatchEx('AcroExch.App')
        pdDoc = win32com.client.DispatchEx('AcroExch.PDDoc')
        pdDoc.Open(pdf)
        jObject = pdDoc.GetJSObject()
        jObject.SaveAs(outputLoc, "com.adobe.acrobat.accesstext")
    except:
        traceback.print_exc()
        return False
    finally:
        del jObject
        pdDoc.Close()
        del pdDoc
        adobe.Exit()
        del adobe
Run Code Online (Sandbox Code Playgroud)

但是这段代码突然停止工作,我得到以下输出:

Traceback (most recent call last):
  File "C:\Documents and Settings\ablishen\workspace\HooverKeyCreator\src\HooverKeyCreator.py", line 38, in __pdf2Txt
    jObject.SaveAs(outputLoc, "com.adobe.acrobat.accesstext")
  File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 505, in __getattr__
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
com_error: (-2147467263, 'Not implemented', None, None)
False
Run Code Online (Sandbox Code Playgroud)

我有类似的用VB编写的代码可以正常工作,所以我猜它与COM接口没有正确绑定到适当的函数有关吗?(我的COM知识不完整).

python com acrobat pywin32 win32com

11
推荐指数
1
解决办法
2114
查看次数

win32com.client.Dispatch 有效,但 win32com.client.gencache.EnsureDispatch 无效

我正在学习 python 的 win32com ,我遇到了一个奇怪的问题。

我正在尝试导出字典列表中的 Outlook 联系人。我的代码与 win32com.client.Dispatch("Outlook.Application) 完美配合。但它使用 win32com.client.gencache.EnsureDispatch("Outlook.Application) 返回 0 个联系人,这应该更快、更“安全”。这是我的代码:

class MapiImport():
    def __init__(self):
        self.olApp = win32com.client.Dispatch("Outlook.Application")
        self.namespace = self.olApp.GetNamespace(u"MAPI")
        # olFolderContacts = 10 :
        self.mapiContacts = self.namespace.GetDefaultFolder(10).Items

    def getContacts(self, *fields):
        contacts = []
        # Class == 40 is ContactItem
        # Class == 69 is DistListItem
        # Exclude ditribution list and others objects != ContactItem
        for contact in filter(lambda x: x.Class == 40,self.mapiContacts) :
            if not fields :
                ctact = dict((x.Name,x.Value) for x in contact.ItemProperties)
            else …
Run Code Online (Sandbox Code Playgroud)

python outlook pywin32 dispatch win32com

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×2

pywin32 ×2

win32com ×2

acrobat ×1

com ×1

dispatch ×1

outlook ×1