【问题标题】:Xamarin Forms: Issue with showing a PDF files using WebviewXamarin Forms:使用 Webview 显示 PDF 文件的问题
【发布时间】:2021-07-27 17:31:15
【问题描述】:

我正在使用自定义渲染器在我的应用上显示 pdf 文件。

以下是我的渲染器代码:

主要项目:

public class PdfWebView : WebView
{
    public static readonly BindableProperty UriProperty = BindableProperty.Create(propertyName: "Uri",
    returnType: typeof(string),
    declaringType: typeof(PdfWebView),
    defaultValue: default(string));
    public string Uri
    {
        get { return (string)GetValue(UriProperty); }
        set { SetValue(UriProperty, value); }
    }
}

安卓:

[assembly: ExportRenderer(typeof(PdfWebView), typeof(MyWebViewRenderer))]
namespace Projectname.Droid.Renderer
{
    public class MyWebViewRenderer : WebViewRenderer
    {
        public MyWebViewRenderer(Context context) : base(context)
        {
        }

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

            if (Control != null)
            {
                var customWebView = Element as PdfWebView;
                Control.Settings.AllowUniversalAccessFromFileURLs = true;

                Control.Settings.JavaScriptEnabled = true;
                Control.LoadUrl(string.Format("https://drive.google.com/viewerng/viewer?url={0}", customWebView.Uri.ToString()));
            }
        }
    }
}

Xaml 和 Xaml.cs:

<local:PdfWebView 
    HorizontalOptions="FillAndExpand"
    VerticalOptions="FillAndExpand"
    x:Name="pdf_Webview"/>
    
pdf_Webview.Uri = pdfurl;

但是当我在 android 平台上运行应用程序时,出现以下异常:

System.NullReferenceException: '对象引用未设置为对象的实例。'

没有在 ios 部分使用渲染器,并且 pdf 在那里工作正常。 android部分的实际问题是什么?

【问题讨论】:

标签: pdf xamarin.forms webview


【解决方案1】:

对渲染器进行了以下修改。从我自己的thread 得到这个解决方案。

public class MyWebViewRenderer  : WebViewRenderer
{
    PdfWebView customWebView;
    public MyWebViewRenderer(Context context) : base(context)
    {
    }
    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
    {
        base.OnElementChanged(e);
        if (Control != null)
        {
            customWebView = Element as PdfWebView;
            Control.Settings.AllowUniversalAccessFromFileURLs = true;
            Control.Settings.JavaScriptEnabled = true;
            if (customWebView.Uri != null)
            {
                Control.LoadUrl(string.Format("https://drive.google.com/viewerng/viewer?url={0}", customWebView.Uri.ToString()));
            }
        }
    }
    protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        base.OnElementPropertyChanged(sender, e);
        if (customWebView.Uri != null && !Control.Url.Contains(customWebView.Uri))
        {
            Control.LoadUrl(string.Format("https://drive.google.com/viewerng/viewer?url={0}", customWebView.Uri.ToString()));
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 2020-11-04
    • 2021-05-10
    • 1970-01-01
    相关资源
    最近更新 更多