在webview控件中显示本地PDF文件显示白屏

时间:2017-10-31 15:48:15

标签: c# xamarin xamarin.ios

我从互联网上加载并保存到设备pdf文件。

接下来,我保存文件路径并使用源路径创建此路径的WebView,但是我看到了白屏。

我有iOS WebView的自定义渲染器

public class ZoomableWebViewRenderer : WebViewRenderer
    {
        protected override void OnElementChanged(VisualElementChangedEventArgs e)
        {
            base.OnElementChanged(e);
            var view = NativeView as UIWebView;
            if (view == null) return;
            view.ScrollView.ScrollEnabled = true;
            view.ScalesPageToFit = true;
        }
    }

此渲染器可以打开图像(png,jpg,tiff),但无法打开pdf文件。 我检查文件路径,它是正确的。 当我尝试缩放此屏幕时,我得到result

1 个答案:

答案 0 :(得分:0)

根据Display a Local PDF File in a WebView,您可以使用BindableProperty创建自定义网页视图,以设置UIWebView的网址,并使用module.exports = function (app) { app.post('/register', function(req, res, next) { req.checkBody('name', 'Name feild is reqiured').notEmpty(); var errors = req.validationErrors(); if(errors){ res.status(400).json({"errors": errors}); } else{ Console.log('No Errors'); res.status(200).json({"foo": "bar"}); } }); }; 呈现自定义网页视图。

  1. 使用BindableProperty创建自定义webview类:

    ViewRenderer<CustomWebView, UIWebView>
  2. 像这样创建渲染器:

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

    请注意,官方文档假定pdf文件存储在项目的Content文件夹中。因此,如果它直接位于Resource文件夹中,请删除路径中的前缀“Content /”。

  3. 像这样在XAML中使用它:

    public class CustomWebViewRenderer : ViewRenderer<CustomWebView, UIWebView>
    {
        protected override void OnElementChanged (ElementChangedEventArgs<CustomWebView> e)
        {
            base.OnElementChanged (e);
    
            if (Control == null) {
                SetNativeControl (new UIWebView ());
            }
            if (e.OldElement != null) {
                // Cleanup
            }
            if (e.NewElement != null) {
                var customWebView = Element as CustomWebView;
                string fileName = Path.Combine (NSBundle.MainBundle.BundlePath, string.Format ("Content/{0}", WebUtility.UrlEncode (customWebView.Uri)));
                Control.LoadRequest (new NSUrlRequest (new NSUrl (fileName, false)));
                Control.ScalesPageToFit = true;
            }
        }
    }