Как просмотреть PDF-файлы с pdf.js в формах Xamarin - PullRequest
0 голосов
/ 18 марта 2019

Я использую элемент управления WebView Xamarin Forms для отображения PDF, проблема в том, что этот элемент управления корректно отображает его только для iOS, для Android этого не происходит, поэтому я должен реализовать различные решения для каждой из платформ, поэтомуЯ использую следующую реализацию с pdf.js recipes

Мое приложение отображает PDF-файлы, которые локально находятся в устройстве, но не отображаются в пользовательском элементе управления, первый вопрос, который у меня естьэто ... Могу ли я передать путь к файлу в WebView, чтобы я мог его визуализировать?следующим образом ...

path

предыдущая вещь для привязки свойства PDF к настраиваемому элементу управления следующей формы

  <local:CustomWebView Uri="{Binding PDF}"
                             HorizontalOptions="FillAndExpand"
                             VerticalOptions="FillAndExpand" />

Стоит отметить, что введение PDF в папку содержимого проекта Android выполняется следующим образом:

Content

, а затем пакетируйте его вследующим образом в моем представлении XAML, это работает !!!

   <local:CustomWebView Uri="CV.pdf"
                             HorizontalOptions="FillAndExpand"
                             VerticalOptions="FillAndExpand" />

Способ передачи пути к моему свойству PDF из моей ViewModel заключается в следующем ...

ViewModel.CS:

  #region Constructor
        public VisorArchivosViewModel(Evidencia evidencia)
        {
            navigationService = new NavigationService();

            this.evidencia = evidencia;

            if (evidencia != null)
            {
                PDF = evidencia.Path;

            }

        }
        #endregion

Я знаю, чтоу меня простой вопрос, но как я могу показать PDF, который хранится локально на моем устройстве в WebView?

ЛЮБАЯ ПОМОЩЬ ДЛЯ МЕНЯ? *

1 Ответ

1 голос
/ 18 марта 2019

Вам необходимо настроить свой пользовательский рендер, чтобы указать локальный путь к PDF.

[assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]

{
    public class CustomWebViewRenderer : WebViewRenderer
    {
        public CustomWebViewRenderer(Context context) : base(context) { }

        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                var customWebView = Element as CustomWebView;
                if (File.Exists(customWebView.Uri))
                {
                    Control.Settings.AllowUniversalAccessFromFileURLs = true;
                    var finalStr = string.Format(
                            "file:///android_asset/pdfjs/web/viewer.html?file={0}",
                            string.Format(
                                "file:///{0}",
                                WebUtility.UrlEncode(customWebView.Uri)
                            )
                        );
                    Control.LoadUrl(finalStr);
                }
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (e.PropertyName == "Uri")
            {
                var customWebView = Element as CustomWebView;
                if (File.Exists(customWebView.Uri))
                {
                    Control.Settings.AllowUniversalAccessFromFileURLs = true;
                    var finalStr = string.Format(
                            "file:///android_asset/pdfjs/web/viewer.html?file={0}",
                            string.Format(
                                "file:///{0}",
                                WebUtility.UrlEncode(customWebView.Uri)
                            )
                        );
                    Control.LoadUrl(finalStr);
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...