无法使用wpf webbrowser打开pdf

问题描述 投票:0回答:1

我正在尝试使用WPF中的Web浏览器创建一个打开本地PDF文件的应用程序。但是文件无法正常打开,而是显示灰色的空白屏幕。当用于打开HTML文件时,代码完全正常。请帮忙!

代码:webBrowser1.Navigate(@"file:///C:/Working/sample.pdf");

注意:如果有必要,我在我的电脑上安装了adobe reader。是吗?

wpf pdf webbrowser-control
1个回答
0
投票

WPF默认使用基于IE的WebBrowser。为了能够查看PDF文件,您必须在IE中安装一个可以显示PDF文件的插件。

除了灰色背景之外,这是一个PC没有安装PDF插件(Acrobat Reader等)的情况:

IE WPF PDF without plugin

如果您不想安装插件,解决此问题的一个选项是使用Windows 10 APIs绘制PDF。

其他选项是第三方库,如CefSharp。以下是使用CefSharp的步骤:

首先安装Nuget CefSharp.WPF

二,机会XAML从默认Web浏览器到:

    <wpf:ChromiumWebBrowser Loaded="ChromiumWebBrowser_Loaded" x:Name="Browser"></wpf:ChromiumWebBrowser>

然后为CefSharp创建自定义解析器:

public class CustomProtocolSchemeHandler : ResourceHandler
{
    public CustomProtocolSchemeHandler()
    {
    }

    public override bool ProcessRequestAsync(IRequest request, ICallback callback)
    {
        return true;
    }
}

public class CustomProtocolSchemeHandlerFactory : ISchemeHandlerFactory
{
    public const string SchemeName = "customFileProtocol";

    public IResourceHandler Create(IBrowser browser, IFrame frame, string schemeName, IRequest request)
    {
        return new CustomProtocolSchemeHandler();
    }
}

几乎最后,在App.xaml.cs中注册解析器:

public partial class App : Application
{
    protected override void OnLoadCompleted(NavigationEventArgs e)
    {
        var settings = new CefSettings();
        settings.RegisterScheme(new CefCustomScheme
        {
            SchemeName = CustomProtocolSchemeHandlerFactory.SchemeName,
            SchemeHandlerFactory = new CustomProtocolSchemeHandlerFactory(),
            IsCSPBypassing = true
        });

        settings.LogSeverity = LogSeverity.Error;
        Cef.Initialize(settings);
    }
}

现在一切都应该有效:

WPF PDF CefSharp

有关使用CefSharp的更多信息:https://www.codeproject.com/Articles/881315/Display-HTML-in-WPF-and-CefSharp-Tutorial-Part

© www.soinside.com 2019 - 2024. All rights reserved.