2015-03-13 121 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的等價物運行它。