Я создаю один сейчас

работаю вXamarin PCL проект с платформамиAndroid а такжеUWP, В качестве функции пользователь должен иметь возможность открыть PDF-файл.

Для этого я используюMozilla pdf.js, Я перешел по этой ссылке, чтобы сделать это наAndroid и UWP. https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/controls/display-pdf/ Только для UWP я не могу заставить его работать.

Вот мой пользовательский рендерер для UWP

[assembly: ExportRenderer(typeof(PdfView), 
typeof(PDF.UWP.Renderers.PdfViewRenderer))]
namespace PDF.UWP.Renderers
{
/// <summary>
/// The asset folder of the UWP app must contain the pdfjs folder and files.
/// </summary>
public class PdfViewRenderer: WebViewRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
    {
        base.OnElementChanged(e);
        if (e.NewElement != null)
        {
            PdfView pdfView = Element as PdfView;
            string sFile = string.Format("ms-appx-web://{0}", WebUtility.UrlEncode(pdfView.Uri));
            Control.Source = new Uri(string.Format("ms-appx-web:///Assets/pdfjs/web/viewer.html?file={0}", sFile));
        }
    }
}
}

Вот мой класс PdfView.

public class PdfView: WebView
{
    public static readonly BindableProperty DocumentInfoProperty =
        BindableProperty.Create(propertyName: nameof(TheDocumentInfo), returnType: typeof(DocumentInfo),
            declaringType: typeof(PdfView), defaultValue: default(DocumentInfo));

    public DocumentInfo TheDocumentInfo
    {
        get { return (DocumentInfo)GetValue(DocumentInfoProperty); }
        set { SetValue(DocumentInfoProperty, value); }
    }

    public string Uri { get { return TheDocumentInfo.LocalUrl; } }
    public string FileName { get { return TheDocumentInfo.FileName; } }
}

Расположение файла в uwp = "ms-appx-web: //C%3A%5CUsers%5CUser%5CAppData%5CLocal%5CPackages%5CPDFTEST.UWP_v4j5n0js0cwst%5CLocalState%5CPDFTest.pdf"

И это правильно.

Но ошибка такова:

Сообщение: неожиданный ответ сервера (0) при получении PDF "ms-appx-web: // C: /Users/User/AppData/Local/Packages/PDFTest.UWP_v4j5n0js0cwst/LocalState/PDFTest.pdf/".

ОБНОВИТЬ

Я воссоздал рендер:

protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
    {
        base.OnElementChanged(e);
        if (e.NewElement != null)
        {
            // TODO: testen
            PdfView pdfView = Element as PdfView;
            string sFile = string.Format("ms-appx-web://{0}/{1}", pdfView.Uri.Replace(pdfView.FileName, ""), WebUtility.UrlEncode(pdfView.FileName));
            Control.Source = new Uri(string.Format("ms-appx-web:///Assets/pdfjs/web/viewer.html?file={0}", sFile));
        }
    }

Я не знаю, является ли это решением моей проблемы, но эта ошибка исчезла.Ошибка сейчас:

PDF.js v1.1.366 (сборка: 9e9df56)

Сообщение: поток должен иметь данные

ОБНОВИТЬ (Я не знаю, стоит ли добавить это в этот вопрос или я должен был сделать еще один).

Моя ошибка все еще

поток должен иметь данные

Теперь я знаю почему. Потому что я разрабатываю приложение UWP и хочу получить доступ к файлу вне моей папки установки. Это место

C: \ Users \ User \ AppData \ Local \ Packages \ PDFTest.UWP_v4j5n0js0cwst \ LocalState \ По-видимому, я не могу получить доступ к файлам за пределами моей папки установки. Это включает копирование файла в мою папку установки и чтение его там.

ОБНОВИТЬ

 У меня есть 2 версии pdf.js в моем проекте. (1.1.366 и 1.9.426) Теперь это мой кодКогда я пытаюсь открыть файл с помощью Launcher.LaunchFileAsync и использовать uriString, он открывает мой браузер и показывает мне файл.

    protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
    {
        base.OnElementChanged(e);
        if (e.NewElement != null)
        {
            PdfView pdfView = Element as PdfView;
            var uriString = "ms-appdata:///local/" + WebUtility.UrlEncode(pdfView.FileName);
            Control.Source = new Uri(string.Format("ms-appx-web:///Assets/pdfjs/web/viewer.html?file={0}", uriString));
        }
    }

В моем приложении я получаю следующую ошибку

(v1.1.366) Поток должен иметь данные.

(v1.9.426) Неожиданный ответ сервера (0) при получении PDF "ms-appdata: ///local/PDFTest.pdf".

Я знаю, что PDF URI является правильным и доступным, но он все еще не работает. (для v1.9.426 я добавил в viewer.js

var HOSTED_VIEWER_ORIGINS = ['null', '

http://mozilla.github.io','https://mozilla.github.io',' ms-appdata: // ',' ms-appx-web: //PDFTest.uwp '];)ссылка на тестовый проект

Теперь я знаю почему. Потому что я разрабатываю приложение UWP и хочу получить доступ к файлу вне моей папки установки. Это место

Ответы на вопрос(1)

Ваш ответ на вопрос