Невозможно загрузить файл PDF, в пути к которому есть специальные символы (! @ #). Формы Xamarin Webview - PullRequest
1 голос
/ 29 мая 2020

Я работаю над загрузкой файла PDF в Xamarin через веб-представление. Если путь к файлу содержит специальные символы, файл pdf не загружается.

Ниже приведен код.

if (e.NewElement - PDFView pdfWebView) {

            this.Control.Settings.JavaScriptEnabled = true;
            this.Control.Settings.AllowFileAccess = true;
            this.Control.Settings.AllowUniversalAccessFromFileURLs = true;
            Control.LoadUrl($"file:///android_asset/pdfjs/web/viewer.html?file=file://{pdfWebView.Uri}");
        }

1 Ответ

0 голосов
/ 29 мая 2020

Вы не указываете, что используете, но исходя из пути к файлу, я могу с уверенностью предположить, что вы используете PDF. js. Если это так, вам нужно URL-кодировать имя файла. Согласно странице часто задаваемых вопросов :

Вы можете изменить опцию приложения defaultUrl в файле web / app_options. js или добавить строку запроса? File = в URL-адрес зрителя, например http://mozilla.github.com/pdf.js/web/viewer.html?file=compressed.tracemonkey-pldi-09.pdf. В последнем случае путь / URL-адрес PDF-файла должны быть закодированы с помощью encodeURIComponent ()

Таким образом, вам просто нужно будет позвонить encodeURIComponent() на своем пути.

Изменить: вы должен кодировать URI с помощью js функции encodeURIComponent(), потому что есть некоторые различия в том, как функция js кодирует путь и как C# кодирует его.

Например, сравнение WebUtility. UrlEcode docs с encodeURIComponent docs, мы видим, что большинство экранирований похожи. Экранируется:

encodeURIComponent () экранирует все символы, кроме: AZ az 0-9 - _. ! ~ * '()

Пока все хорошо. К сожалению, оба метода по-разному экранируют символ "" (пробел).

C# метод UrlEncode делает следующее:

Каждый символ '' (пробел) преобразуется на символ + (плюс).

JS 'функция encodeURIComponent делает следующее:

console.log (encodeURI ("AB C ab c 123 ")); // ABC% 20abc% 20123 (пробел кодируется как% 20)

...