wpf - 无法使用 wpf 网络浏览器打开 pdf

标签 wpf pdf webbrowser-control

我正在尝试创建一个应用程序来使用 WPF 中的网络浏览器打开本地 PDF 文件。但是文件没有正确打开,而是显示 灰色空白屏幕 .当用于打开 HTML 文件时,该代码运行良好。请帮忙!

image

代码:webBrowser1.Navigate(@"file:///C:/Working/sample.pdf");
注意:如果有必要,我在我的 PC 上安装了 adobe reader。是吗?

最佳答案

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

除了灰色背景外,在 IE 没有安装 PDF 插件(Acrobat Reader 等)的 PC 上也会发生这种情况:

IE WPF PDF without plugin

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

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

首先安装 Nuget CefSharp.WPF

其次,将 XAML 从默认的 WebBrowser 更改为:

    <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

关于wpf - 无法使用 wpf 网络浏览器打开 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55001077/

相关文章:

c# - DotNet 中 Textbox/RichTextbox 内部的组件

c# - 样式化 WPF ComboBox 项目

android - 如何检查pdf文件是从其他文件类型转换而来的

c# - 是否可以查询WebBrowser控件水平滚动条是否可见?

scroll - 在 Windows Phone 8 Web 浏览器中禁用滚动和缩放

c# - 如何在主应用程序线程中自动捕获 Task 对象的操作引发的异常?

iphone - 如何验证 NSData 是 PDF?

android - 在应用程序中创建 PDF/Word (Doc) 文件

javascript - WebBrowser 控件不适用于某些 javascript 结构

c# - 从 contentpresenter 中的内容获取附加属性值