在工作中,有时候会遇到得到当前打开的PDF,我们不知道这个PDF的路径是什么,只知道它是当前打开的那个,如何做呢?
首先需要电脑上安装了Adobe Acrobat,然后还安装了win32com。通过win32com打开AcroExch.App,从而操作Adobe Acrobat。其中的具体API还需要参考Adobe官方文档 Acrobat DC SDK Documentation
import os
import winerror
from win32com.client.dynamic import Dispatch, ERRORS_BAD_CONTEXT
ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL)
my_dir = r"E:\\ffm\\my"
try:
ApDoc = Dispatch("AcroExch.App")
paDoc = ApDoc.GetActiveDoc()
pdDoc = paDoc.GetPDDoc()
jsObject = pdDoc.GetJSObject()
abc = pdDoc.GetFileName()
jsObject.SaveAs(os.path.join(my_dir, abc))
jsObject.SaveAs(os.path.join(my_dir, abc[:-3]+'jpg'), "com.adobe.acrobat.jpeg")
except Exception as e:
print(str(e))
print("出错啦!")
finally:
ApDoc.CloseAllDocs()
ApDoc.Hide()
jsObject = None
pdDoc = None
这段代码首先用Dispatch(“AcroExch.App”)打开一个AcroExch.App,然后用GetActiveDoc()捕捉到当前活动的PDF,然后用paDoc.GetPDDoc()得到文件,用GetFileName()得到文件名称,用GetJSObject()得到文件的JS对象,把这个JS对象存到另一个地方,并且还把这个JS对象另存为图片。名称都用的PDF原来的名称。
如果是从磁盘上打开一个PDF文档,需要改动一下上面的try语句:
try:
AvDoc = Dispatch("AcroExch.AVDoc")
if AvDoc.Open(src, ""):
pdDoc = AvDoc.GetPDDoc()
jsObject = pdDoc.GetJSObject()
jsObject.SaveAs(os.path.join(my_dir, abc[:-3]+'jpg'), "com.adobe.acrobat.jpeg")
最后关掉所有活动的PDF文档,隐藏窗口。清空用过的对象等等。