如何从Internet Explorer嵌入对象访问完整的Adobe Acrobat AcroExch COM API?

时间:2015-03-13 14:48:02

标签: internet-explorer com ui-automation acrobat

我有以下情况:

  • Windows 7 SP1 32位上的Internet Explorer 9
  • Adob​​e Acrobat Professional版本10
  • 一个代码如下的网页:

<object data="foo.pdf" src="foo.pdf">

鉴于:

  • 系统上的默认PDF阅读器是Adobe Acrobat
  • Adob​​e Reader的浏览器插件被禁止使用Acrobat的插件
  • 插件加载时正在运行Acrobat.exe
  • 我正在使用Internet Explorer的COM自动化(来自Ruby,但这并不重要)获取对object的{​​{1}}对象的引用

使用此AxAcroPDFLib.AxAcroPDF对象,我需要操作表单字段,阅读文本以及执行与AxAcroPDFLib.AxAcroPDF API完全合理的其他内容,然后单击网页上的按钮(使用IE自动化)将表单字段序列化为XML并将其保存到Web服务器。

由于业务需求,我需要从用户的角度测试这种“端到端”,所以我不能只在XML中填充值,看看服务器是否接受它们。

有没有办法从AcroExch.PDDoc引用访问已打开的PDF文档的AcroExch.PDDoc API, 将PDF保存到磁盘上的文件并打开它使用AxAcroPDFLib.AxAcroPDF

问题在于,如果我将其保存到磁盘并在Acrobat中重新打开它,据我所知,该文件不能用于保存表单字段数据并将其提交给Web服务器。 (或者可以?)

2 个答案:

答案 0 :(得分:1)

  

有没有办法访问打开的PDF的AcroExch.PDDoc API   来自AxAcroPDFLib.AxAcroPDF参考的文档,不保存   PDF到磁盘上的文件并使用AcroExch.App打开它?

我认为你不能用AxAcroPDFLib.AxAcroPDF做到这一点。检查"Developing for Adobe® Reader®",第25页(&#34; OLE自动化&#34;):

  

在Windows上, Adob​​e Reader支持的唯一 OLE自动化是   PDF浏览器控件界面,可让您处理PDF   将文档作为外部应用程序中的ActiveX文档。这个   可以加载文件,移动到文件中的各个页面   文件,突出显示文本选择,并指定各种打印和   显示选项,如下所示。

此外,还有支持的API的详细列表,您也可以使用OleView确认。

可能可以开发Adobe Acrobat插件,但是:

  

为Adobe Reader编写的任何插件都必须启用Reader,这样   意味着您需要获得Adobe的许可和许可   系统

答案 1 :(得分:0)

我已经进行了搜索,我找到了this VBScript example

Set acrobatApplication = CreateObject("AcroExch.App")
Set AVDoc = CreateObject("AcroExch.AVDoc")
Set gPDDoc = CreateObject("AcroExch.PDDoc")

If gPDDoc.Open("c:\adobe.pdf") Then
Set jso = gPDDoc.GetJSObject
Set oAdd = jso.addField("FirmaField1", "signature", 0, Array(20, 100,
100, 20))
Set oSign = jso.getField("FirmaField1")
Set ppklite = jso.security.getHandler("Adobe.PPKLite", True)

ppklite.login "1111", "c:\certificate_file.pfx"
oSign.signatureSign ppklite
ppklite.logout
end if

很明显,他在那里使用 AcroExch.PDDoc 。也许你可以从浏览器或Javascript等价物运行它。