не могу открыть PDF с WFF - PullRequest
       35

не могу открыть PDF с WFF

0 голосов
/ 05 марта 2019

Я пытаюсь создать приложение для открытия локального файла PDF с помощью веб-браузера в WPF.Однако файл не открывается должным образом, вместо этого отображается серый пустой экран .Код прекрасно работает, когда используется для открытия файла HTML.Пожалуйста, помогите!

image

Код: webBrowser1.Navigate(@"file:///C:/Working/sample.pdf");

Примечание: если у меня на компьютере установлен Adobe Reader, если это необходимо.Это 1011 *

1 Ответ

0 голосов
/ 05 марта 2019

WPF по умолчанию использует браузер на основе IE.Чтобы иметь возможность просматривать PDF-файлы, в IE должен быть установлен плагин, который может отображать PDF-файлы.

В дополнение к серому фону, это может случиться с ПК, где IE не 'у вас не установлен PDF-плагин (Acrobat Reader и т. д.):

IE WPF PDF without plugin

Если вы не хотите устанавливать плагины, один из способов обойти этопроблема заключается в использовании Windows 10 API для рисования PDF.

Другой вариант - сторонняя библиотека, например CefSharp .Вот шаги для использования CefSharp:

Сначала установите Nuget CefSharp.WPF

Во-вторых, измените XAML из стандартного веб-браузера на:

    <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

...