3

1 つの 32 ビット WPF アプリケーションを作成しています。作成した PDF を WebBrowser コントロールに表示する必要があります。しながら、

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

Adobe Reader ウィンドウで PDF ファイルを開きます。

私が必要としているのは、Adobe Reader ウィンドウではなく、WebBrowser 内で PDF を開く必要があることです。私も試してみWebBrowser.NavigateToStreamましWebBrowser.Sourceたが、うまくいきません。

これに対する解決策は何ですか?私は助けを楽しみにしています。

4

1 に答える 1

4

Internet Explorer 用の Adob​​e 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.
    */
}
于 2013-04-26T10:01:23.123 に答える