xamarin android pdf,在Xamarin.forms中打开Pdf文件

如果您的PDF文件托管在其他地方或本地设备上,这一切都取决于一个事实 .

托管

如果是在线托管;最简单的方法是使用PDF文件的URI执行 Device.OpenUri() ,但这会打开外部浏览器 .

如果要将其合并到应用程序中,可以创建一个包含 WebView 的页面并导航到那里的PDF . 这应该是非常简单的 .

用 WebView 实现一个页面,我假设您使用XAML .

xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

x:Class="DisplayPDF.WebViewPage"

Padding="0,20,0,0">

本地

设备上的本地没有统一的方法来执行此操作 . 一种方法是通过在 WebView 中显示它来实现它,这与上面的 WebView 基本相同,但是你需要为你想要使用的每个平台创建一个 CustomRenderer . 您可以使用dylansturg提供的the link作为参考 .

基本上,您使用自定义 WebView 组件实现相同的页面 .

xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"

xmlns:local="clr-namespace:DisplayPDF;assembly=DisplayPDF"

x:Class="DisplayPDF.WebViewPage"

Padding="0,20,0,0">

您的自定义 WebView 将如下所示:

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); }

}

}

它基本上只是一个 WebView 但我们添加一个 Uri 属性 .

iOS

现在,如果您想为iOS实现它,请在您的平台项目中创建一个 CustomRenderer 并实现它,如下所示:

[assembly: ExportRenderer (typeof(CustomWebView), typeof(CustomWebViewRenderer))]

namespace DisplayPDF.iOS

{

public class CustomWebViewRenderer : ViewRenderer

{

protected override void OnElementChanged (ElementChangedEventArgs 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;

}

}

}

}

在这里,您将看到我们如何创建本机 UIWebView 并将其导航到我们的应用程序提供的文件 . 注意:该文件应位于内容文件中,并标记为 BundleResource . 如果要下载文件(或新版本的策略),请确保相应地调整路径 .

Android

对于Android来说,它需要更多的工作,你必须下载pdf.js库,将它添加到Assets下的项目中 . 确保检查文件是否也已添加到存储库中 . 在我的情况下,.js文件默认位于我的 .gitignore 文件中 .

现在创建一个这样的自定义渲染器:

[assembly: ExportRenderer (typeof(CustomWebView), typeof(CustomWebViewRenderer))]

namespace DisplayPDF.Droid

{

public class CustomWebViewRenderer : WebViewRenderer

{

protected override void OnElementChanged (ElementChangedEventArgs 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))));

}

}

}

}

请注意我们如何在此处导航到pdf.js库并为其提供查询参数以指定我们的PDF文件 . 同样,这是您提供应用程序的文件 . 这也是 only available from API 19 and up .

对于Windows,您还应该使用pdf.js库 .

根据尼古拉的善意回应,似乎还有一个轻量级pdf.js lib for mobile我自己也没有使用它,但它似乎更适合移动使用 .

由于这个问题似乎仍然相关,我认为用更彻底的更新blog post更新它会很好 .

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值