WPF webbrowser在Adobe阅读器窗口中打开PDF文件

时间:2013-04-26 03:38:56

标签: wpf pdf

我正在创建一个32位WPF应用程序。它需要在WebBrowser控件中显示创建的PDF。 在做的时候,

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

它在Adobe阅读器窗口中打开PDF文件。

我的需要是PDF应该在WebBrowser中打开,而不是在Adobe阅读器窗口中打开。 我还尝试了WebBrowser.NavigateToStreamWebBrowser.Source,但它无效。

有什么办法可以解决这个问题?我期待着寻求帮助。

1 个答案:

答案 0 :(得分:4)

您是否检查过您是否为Internet Explorer安装了Adobe Reader?您还应验证,您的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.
    */
}