【发布时间】:2013-12-06 14:17:29
【问题描述】:
- Python 2.7 (r27:82525, Jul 4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
- Windows XP SP3
- Python 2.7 pywin32-218
- Adobe Acrobat X 10.0.0
我想使用 Python 自动化 Acrobat Pro 以将 PDF 导出为 XML。我已经使用正在运行的程序中的“另存为”对话框手动尝试过,现在想通过 Python 脚本来完成。我已经阅读了很多页面,包括 Adobe SDK、SDK 论坛、VB 论坛的部分内容,但运气不佳。
我在这里阅读了 Blish 的问题:"Not implemented" Exception when using pywin32 to control Adobe Acrobat
还有这个页面:timgolden python/win32_how_do_i/generate-a-static-com-proxy.html
我错过了一些东西。我的代码是:
import win32com.client
import win32com.client.makepy
win32com.client.makepy.GenerateFromTypeLibSpec('Acrobat')
adobe = win32com.client.DispatchEx('AcroExch.App')
avDoc = win32com.client.DispatchEx('AcroExch.AVDoc')
avDoc.Open('C:\Documents and Settings\PC\Desktop\a_PDF.pdf', 'C:\Documents and Settings\PC\Desktop')
pdDoc = avDoc.GetPDDoc()
jObject = pdDoc.GetJSObject()
jObject.SaveAs('C:\Documents and Settings\PC\Desktop\a_PDF.xml', "com.adobe.acrobat.xml-1-00")
完整的错误是:
Traceback (most recent call last):
File "<pyshell#31>", line 1, in <module>
jObject.SaveAs('C:\Documents and Settings\PC\Desktop\a_PDF.xml', "com.adobe.acrobat.xml-1-00")
File "C:\Python27\lib\site-packages\win32com\client\dynamic.py", line 511, in __getattr__
ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
com_error: (-2147467263, 'Not implemented', None, None)
我猜它与 make.py 有关,但我不明白如何在我的代码中实现它。
我从我的代码中提取了这一行并在运行时遇到了同样的错误:
win32com.client.makepy.GenerateFromTypeLibSpec('Acrobat')
然后我将这两行从“DispatchEX”更改为“Dispatch”,同样的错误:
adobe = win32com.client.Dispatch('AcroExch.App')
avDoc = win32com.client.Dispatch('AcroExch.AVDoc')
当我自己运行 Dispatches 然后回调它们时,我得到:
>>> adobe = win32com.client.DispatchEx('AcroExch.App')
>>> adobe
<win32com.gen_py.Adobe Acrobat 10.0 Type Library.CAcroApp instance at 0x18787784>
>>> avDoc = win32com.client.Dispatch('AcroExch.AVDoc')
>>> avDoc
<win32com.gen_py.Adobe Acrobat 10.0 Type Library.CAcroAVDoc instance at 0x20365224>
这是否意味着我应该只调用一次 Dispatch?我拉了:
adobe = win32com.client.Dispatch('AcroExch.App')
得到了同样的错误。
这个 Adobe 网站说:
AVDoc
Product availability: Acrobat, Reader
Platform availability: Macintosh, Windows, UNIX
Syntax
typedef struct _t_AVDoc* AVDoc;
A view of a PDF document in a window. There is one AVDoc per displayed document. Unlike a PDDoc, an AVDoc has a window associated with it.
- acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/API_References/Acrobat_API_Reference/AV_Layer/AVDoc.html#AVDocSaveParams
PDDoc 页面显示:
A PDDoc object represents a PDF document. There is a correspondence between a PDDoc and an ASFile. Also, every AVDoc has an associated PDDoc, although a PDDoc may not be associated with an AVDoc.
- /9.1/Acrobat9_1_HTMLHelp/API_References/Acrobat_API_Reference/PD_Layer/PDDoc.html
我尝试了以下代码,也得到了同样的错误:
import win32com.client
import win32com.client.makepy
pdDoc = win32com.client.Dispatch('AcroExch.PDDoc')
pdDoc.Open('C:\Documents and Settings\PC\Desktop\a_PDF.pdf')
jObject = pdDoc.GetJSObject()
jObject.SaveAs('C:\Documents and Settings\PC\Desktop\a_PDF.xml', "com.adobe.acrobat.xml-1-00")
如果我改变同样的错误:
pdDoc = win32com.client.Dispatch('AcroExch.PDDoc')
到
pdDoc = win32com.client.gencache.EnsureDispatch('AcroExch.PDDoc')
喜欢这里:win32com.client.Dispatch works but not win32com.client.gencache.EnsureDispatch
【问题讨论】:
标签: windows python-2.7 acrobat pywin32