我从我的服务器下载一个 pdf 流。在我的应用程序中,我将 bytearray 以 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" />
这是我的自定义 View 代码:
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);
}
我错过了什么吗?
请您参考如下方法:
如果我没记错的话,您可以在 iOS 的 WebView 中显示“远程”PDF。 Android 有一些问题。我建议看看这个 repo OpenPDF .我使用 CustomRenderer 和谷歌工具来显示 PDF。我在某些 Android 版本上遇到了一些问题......但你可以看一看。(这里是 blog )
否则@AdamPedley 建议使用 PDF JS 查看器 Adam Pedley 密码是here .
这是 Android 的 CustomRenderer
[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))));
}
}
}
}
