【问题标题】:Xamarin Forms: PDF does not work on Android PlatformXamarin 表单:PDF 在 Android 平台上不起作用
【发布时间】:2020-10-15 05:50:42
【问题描述】:

基于此链接: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/webview?tabs=windows 我试图显示此处列出的 PDF: https://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdf

我在 iOS 上没有问题,但在 Android 上这似乎不起作用。 这是具体的代码,真的不多,

        {
            var browser = new WebView();            
            browser.Source = "https://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdf";            
            Content = browser;
        }

我认为我们不再需要 PDFJ 来使 PDF 在 Android 平台上运行。 这仍然是真的吗?

【问题讨论】:

  • 并非所有 Android 设备都支持原生 PDF。您是否尝试过在 Chrome 中打开该 url 看看会发生什么?
  • 我正在测试的设备,当通过浏览器访问 PDF 时。 ,它会打开 PDF。

标签: xamarin xamarin.forms xamarin.android


【解决方案1】:

您可以使用 Google PDF Viewer 在线阅读您的 pdf。首先,在 PCL 文件夹中创建一个自定义 webview。

   public class MyWebview:WebView
    {
    }

然后用在WebPage.cs

  public class WebPage : ContentPage
    {
        public WebPage()
        {
            var browser = new MyWebview();
           
            Content = browser;
        }
    }

在 android 文件夹中为您的 webview 创建一个自定义渲染器。

[assembly: ExportRenderer(typeof(WorkingWithWebview.MyWebview), typeof(MyWebViewRenderer))]
namespace WorkingWithWebview.Android
{
   public class MyWebViewRenderer:WebViewRenderer
    {
        Context _context;

        public MyWebViewRenderer(Context context) : base(context)
        {
            _context = context;
        }
        protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
        {
            base.OnElementChanged(e);
            var settings=Control.Settings;
            settings.JavaScriptEnabled = true;
            settings.SetPluginState(WebSettings.PluginState.On);

            Control.SetWebViewClient(new MyWebviewClient());

           

                  string pdf = "https://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdf";
            Control.LoadUrl("https://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf);
        }
    }

    internal class MyWebviewClient : WebViewClient
    {
        public override bool ShouldOverrideUrlLoading(global::Android.Webkit.WebView view, string url)
        {
            return false;
        }
    }
}

这里正在运行 GIF。

【讨论】:

  • 谢谢。我已经实施了这个解决方案。但是为什么要声称 PDF 可以在 WebView 中工作呢?适用于Android和iOS? - 文档——因为 WebView 是在每个平台上使用本机组件实现的,所以 WebView 能够显示在每个平台上都可以查看的文档。这意味着 PDF 文件可以在 iOS 和 Android 上运行。
  • 表示本地PDF文件,如Assets文件夹或外部本地stroage。
  • @leon-lu-msft 在文档中的哪个地方说 Local?授予它也没有说远程,但如果它被澄清会有所帮助。
  • 本文不包含如何实现PDF文件显示,可以使用PDF Viewer或者pdf.js来显示远程pdf或者本地pdf。根据我的理解,这篇文章的意思是webview可以显示PDF,但是不能在xamarin Forms的Native webview中显示,如果你觉得这篇文章不清楚或有错误,可以在这个链接docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/…反馈这个页面
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2020-07-30
  • 2014-11-19
  • 1970-01-01
  • 2018-11-11
  • 2017-12-27
相关资源
最近更新 更多