2017-12-15 63 views
0

私のサーバーからpdfストリームをダウンロードします。私のアプリでは、pdfとしてローカルフォルダにbytearrayを保存します。しかし、私がwebviewで開くと、白いページが表示されます。Xamarin.formsのPDFをWebviewで表示できない

私はこの例に従いました:https://developer.xamarin.com/recipes/cross-platform/xamarin-forms/controls/display-pdf。ここで

は私のXAMLでcustomwebviewである:ここで

<local:CustomWebView x:Name="customView" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" /> 

は、カスタムビューの私のコードです:

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バイト配列を取得し、それをローカルに保存するための私の方法です。

private async void ReadPDF() 
     { 
      var response = CommonLibrary.Helpers.HTTPClientHelper.DownloadPDF(AccountBL.AccessToken, APISettings.APIURI("api/booking/pdf")); 
      var streamContent = response.Content as System.Net.Http.StreamContent; 
      var bytes = CommonLibrary.Helpers.FileHelper.ReadBytes(await streamContent.ReadAsStreamAsync()); 
      var dir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
      var fileName = "test.pdf"; 
      CommonLibrary.Helpers.FileHelper.WriteFileFromByteArray(bytes, dir, fileName); 

      customView.Uri = System.IO.Path.Combine(dir, fileName);    
     } 

私に何かが不足していますか?

+0

ためCustomRendererですが、あなたはそれがロードの問題や表示の問題だかどうかを確認するために、あなたのWebViewのウェブサイトに行くことになってみましたか? – Jaxi

+0

こんにちはJaxi、あなたは正しいです。通常のサイトも読み込まれません。あなたはちょうどcustomWebviewを設定する必要があります。私は正しいですか? – Yaza

+0

こんにちはJaxi、ソースプロパティ - > customView.Source = "http://www.google.nl"を設定すると、通常のサイトが読み込まれます。ソースをpdfの場所に設定すると、動作しません。 – Yaza

答えて

1

正しく覚えていれば、iOSのウェブビューに「リモート」PDFを表示できます。 Androidにはいくつか問題があります。私はこのレポを見てみることをお勧めしますOpenPDF。私はCustomRendererとGoogleツールを使ってPDFを表示します。私はいくつかのAndroidバージョンでいくつかの問題があった...しかし、あなたは見ることができます。(ここではblog

それ以外の場合はPDF JSビューアAdam Pedley コードがhereあるを使用する@AdamPedleyの提案があります。

これは、Android

[assembly: ExportRenderer (typeof(CustomWebView), typeof(CustomWebViewRenderer))] 
namespace DisplayPDF.Droid 
{ 
    public class CustomWebViewRenderer : WebViewRenderer 
    { 
     protected override void OnElementChanged (ElementChangedEventArgs<WebView> e) 
     { 
      base.OnElementChanged (e); 

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

あなたの答えをありがとう、openpdfは行く方法ですが、私はいくつかの問題が発生しています。ポータブルプロジェクトでのみ動作しますか?私は私のソリューションに共有プロジェクトを持っています。 – Yaza

+0

共有プロジェクトで問題なく動作すると思います。こんにちはアレッサンドロ、私はこれがどのように動作するかはわかりませんが、WebViewのカスタムレンダラーです。 –

+0

共有プロジェクトでレンダラーを作成しようとしましたが、これは成功しません。このレンダラーはどこに置くべきですか?これはAndroidでのみ動作しますか?私もそれがIOSのために動作したいですか?私はレンダラーのコンセプトを理解していません。私は一歩一歩手伝ってください。前もって感謝します。そして、幸せなクリスマス。 – Yaza

関連する問題