2013-04-26 2 views
3

하나의 32 비트 WPF 응용 프로그램을 만듭니다. WebBrowser 컨트롤에서 작성된 PDF를 표시해야합니다. WPF webbrowser가 Adobe Reader 윈도우에서 PDF 파일을 엽니 다.

"WebBrowser.Navigate(new Url("D:\\TestPDF\\MyDocument.pdf"))"; 

Adobe Reader의 창에서 PDF 파일을 엽니 다.

나의 필요는 Adobe Reader 윈도우가 아닌 WebBrowser에서 열어야합니다. 나는 또한 WebBrowser.NavigateToStreamWebBrowser.Source을 시도했지만 작동하지 않습니다.

이 문제를 해결할 수있는 방법은 무엇입니까? 나는 도움을 고대하고 있습니다.

답변

4

Internet Explorer 용 Adobe 판독기가 설치되어 있는지 확인 했습니까? 또한 Internet Explorer에서 PDF 파일을 열 수 있는지 확인해야합니다.

때때로 다른 Internet Explorer 렌더링 엔진을 사용하는 데 도움이됩니다. 이 코드는 다음 코드로 아카이브 할 수 있습니다 (경고 : 관리자 권한이 필요합니다).

private void CheckAndFixWebBrowserRenderingEngine() 
{ 
    RegistryKey baseRegistryKey = Registry.LocalMachine; 
    string renderingEngineSubKeyString = @"SOFTWARE"; 

    // 64bit operationg systems have another registry path 
    if (Environment.Is64BitOperatingSystem) 
    { 
     renderingEngineSubKeyString += @"\Wow6432Node"; 
    } 

    renderingEngineSubKeyString += @"\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION"; 

    var assemblyValueKey = Path.GetFileName(App.ResourceAssembly.Location); 
    var renderingEngingeValue = 9999; // check other values below 

    try 
    { 
     RegistryKey sk1 = baseRegistryKey.CreateSubKey(renderingEngineSubKeyString); 

     var value = sk1.GetValue(assemblyValueKey); 
     if (value == null || value.ToString() != renderingEngingeValue.ToString()) 
     { 
      sk1.SetValue(assemblyValueKey, renderingEngingeValue); 

      LogHandler.Instance.Add(string.Format("Did update webbrowser rendering engine from {0} to 9000.", value == null ? "[missing]" : value)); 
     } 
    } 
    catch (Exception ex) 
    { 
     LogHandler.Instance.Add("Could not check webbrowser rendering engine in registry."); 
     LogHandler.Instance.Add(ex.ToString(), Logging.LoggingPriorities.Exception); 
    } 

    /* 
    9999 (0x270F) 
    Internet Explorer 9. Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive. 

    9000 (0x2328) 
    Internet Explorer 9. Webpages containing standards-based !DOCTYPE directives are displayed in IE9 mode. 

    8888 (0x22B8) 
    Webpages are displayed in IE8 Standards mode, regardless of the !DOCTYPE directive. 

    8000 (0x1F40) 
    Webpages containing standards-based !DOCTYPE directives are displayed in IE8 mode. 

    7000 (0x1B58) 
    Webpages containing standards-based !DOCTYPE directives are displayed in IE7 Standards mode. 
    */ 
} 
+1

나는 interoperable을 사용하여 간단한 것을 발견했습니다. Adobe Reader가있는 사용자 컨트롤 (Winform)을 추가하고 상호 운용성 – nullrefereceexception

+0

@Bernhard Krenz를 사용하여 wpf에 넣으십시오.이 코드는 32 비트 창에 유효하지만 64 비트 버전에서는 작동하지 않습니다. – MuhammadHani

관련 문제