2012-11-13 40 views
3

有什麼方法可以查詢IE插件(Adobe Reader)的狀態嗎?我有一種情況,我們通過嵌入式瀏覽器(基於我的研究的首選模式)向用戶展示許多多頁面報告,該瀏覽器由標籤頁託管。當用戶離開報告時,通常要修改數據,它們會返回到重新初始化的Adobe Reader。這意味着他們的位置已經丟失,並且展開的書籤節點已經崩潰。System.Windows.Forms.WebBrowser控件顯示pdf

下面是一個簡化的代碼片段,我希望能夠充分表達我的問題的性質。

Public partial class ReportView : UserControl 
{ 
    private System.Windows.Forms.WebBrowser webBrowser; 
    private MyNamespace.ReportGenerator reportGen; 
    private String currentPDFtempPath; 

    public ReportView() 
    { 
     InitializeComponent(); 
     this.Leave += (o, e) => { /*how can I save current place in pdf?*/ }; 
     this.Enter += (o, e) => { /*return user last place in large pdf*/ }; 
    } 

    public void ViewReport(string reportName) 
    { 
     currentPDFtempPath = reportGen.GetReport(reportName); 
     webBrowser.Navigate(currentPDFtempPath); 
    } 

    private void RefreshReport() 
    { 
     webBrowser.Navigate(currentPDFtempPath); /*reinitializes Adobe Reader*/ 
    } 
} 

public class ReportController 
{ 
    private DataModel model; 
    private ReportView view; 

    ReportController(DataModel m, ReportView v) 
    { 
     this.model = m; 
     this.view = v; 

     model.Changed += (o, e) => { view.RefreshReport(); } 
    } 
} 
+0

很難看到這段代碼的重點。只需刪除Enter事件處理程序。 –

+0

當對模型數據進行更改時,需要重新生成報告。真正的代碼通過控制器來處理它,但我認爲這是表達我試圖完成的內容的最簡潔的方式。 –

+0

只需調用ViewReport以顯示另一個報告。 Enter事件不會修改模型數據,所以應該* not *重新生成報告。 –

回答

3

如果您的用戶基礎具有標準化到Acrobat的一個版本中或連續地更新爲最新的和最好的Acrobat,一個替代的解決方案是消除web瀏覽器控件並添加一個參考AcroPDF/AxAcroPDF庫/ Active X的控制,它從窗體工作。我在過去的6年中一直在我的公司使用它,它的工作完美無瑕。

+0

用戶羣與標準化程度相差甚遠,但我曾考慮過將特定版本的Adobe Reader與我的安裝捆綁在一起,並使用active x控件。儘管這需要進行重大改寫,但我仍然很難使用活動x控件的API參考,並且在一個線程中看到了一條評論,即較新版本的Adobe Reader對此提供的支持較少。 –