2016-12-11 35 views
0

我正在寫一個加載pdf文件的應用程序,並獲取有關Adobe Reader進程的信息。如何以編程方式知道Adobe Reader是否完成加載文件?

我的問題是,我不知道什麼時候Adobe Reader完成加載文件。目前我作爲一個調試程序連接到該進程,因此該進程顯然運行速度較慢,我不想只睡幾秒鐘()。我不在乎解決方案是使用C++還是C#,因爲我可以向我的程序發出一個事件的信號。

我正在尋找Adobe Reader的特定解決方案,希望其他Adobe讀者(例如Acrobat Reader DC)。

我試了幾個解決方案:

  • 我試着寫在C++中的Adobe插件時的土坯加載完成後,可以引發事件。這是一個簡單的解決方案,但問題在於Adobe希望Adobe Reader的所有插件都由他們簽名,這可能會花費很多。這就是我放棄這個想法的原因。
  • 我嘗試使用IAC(Inter Application Communication)根據他們的手冊,但它沒有爲我工作,說實話它寫得很差。他們暴露了一個COM接口,但我似乎無法讓它工作。

一個對我的解決辦法是即使我可以調用一次,第二次,而且一旦它發生,我可以引發一個事件didFinishLoading()函數。

我一直在努力奮鬥了幾天,真的很感激任何幫助。

謝謝!

+1

我不認爲,你所要求的事件甚至存在。 Adobe Acrobat Reader按需加載和顯示頁面。它不會加載整個文檔。 – IInspectable

+0

如果你看看這裏:http://help.adobe.com/livedocs/pdfl_sdk/9/PDFL_SDK9_HTMLHelp/API_References/Acrobat_API_Reference/PD_Layer/PDDoc.html,你會看到有一個PDDocDidOpen()函數,這是我需要的。問題是,它只能用插件訪問...... – Alex

+0

如果這是您正在尋找的事件,爲什麼不使用它?儘管如此,沒有跡象表明這個事件被提出,當一個文件**完成**加載。更像是一個回調,在驗證了文檔的初步完整性之後,並且創建了內部對象表示。 – IInspectable

回答

0

由於PDF是隨機訪問,整個文件可能永遠不會加載,直到您強制它。您可以通過IAC將一些JavaScript注入文件,這將導致整個文件被讀取。像「this.syncAnnotScan()」,它保證所有的註釋在方法返回時都會被掃描,即使沒有任何註釋。這意味着每個頁面在運行之前都需要加載。這並不理想,但確實奏效。

相關問題