2015-03-13 126 views
3

我有以下情况:如何从Internet Explorer嵌入式对象访问完整的Adobe Acrobat AcroExch COM API?

  • 的Internet Explorer 9在Windows 7 SP1 32位
  • 的Adobe Acrobat Professional版本10
  • 与代码中的网页这样的:

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

鉴于:

  • 系统上的默认的PDF阅读器是使用Adobe Acrobat
  • 的Adobe阅读器的浏览器插件支持Acrobat的插件
  • Acrobat.exe的抑制运行时的插件加载
  • 我使用的是IE浏览器的COM自动化(从红宝石,但这并不重要),以获得对objectAxAcroPDFLib.AxAcroPDF对象

参考使用此AxAcroPDFLib.AxAcroPDF对象,我需要处理表单字段,阅读文本,并做其他的东西,是完美的原因能够使用AcroExch.PDDoc API,然后单击网页上的按钮(使用IE自动化)以将表单字段序列化为XML并将其保存到Web服务器。

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

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

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

回答

1

有什么办法来访问从AxAcroPDFLib.AxAcroPDF参考打开PDF文档 的AcroExch.PDDoc的API,而 PDF保存到磁盘上的文件开放它在使用AcroExch.App?

我不认为你可以用AxAcroPDFLib.AxAcroPDF来做到这一点。检查"Developing for Adobe® Reader®",25页( “OLE自动化”):

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

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

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

Adob​​e Reader外的任何书面插件必须阅读器启用,这 意味着你将需要获得许可,从Adobe授权 系统。

+0

这是最令人费解的,因为Adobe ** Reader **根本不在图片中。在此系统上打开嵌入式PDF时,Reader不会激活; ** Acrobat **。在浏览器中显示PDF时运行“Acrobat.exe”。你是说当Acrobat嵌入在浏览器窗口中时,它的能力只有Reader? – allquixotic 2015-03-16 21:22:42

+0

@allquixotic,我是说'AxAcroPDFLib.AxAcroPDF' ActiveX控件中可用的API集是相同的,无论你是否在某个特定的PC上安装了Reader或完整的Acrobat。我相信这背后的原因是,这个ActiveX最初设计为IE插件,并且这组API被故意限制为[这些](http://help.adobe.com/livedocs/acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/wwhelp/ wwhimpl/JS/HTML/wwhelp.htm?HREF = IAC_API_OLE_Objects.103.167.html&访问= TRUE)。 – Noseratio 2015-03-16 22:32:26

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的等价物运行它。