如何在Xamarin Forms上使用“ Word”应用程序打开文件.doc?

时间:2018-11-22 11:21:18

标签: xamarin xamarin.forms xamarin.ios

使用Xamarin表单,在iOS上,如何通过UrL打开文件时检查并打开Word app? 参考:https://docs.microsoft.com/en-us/office/client-developer/integration/integrate-with-office-from-ios-applications

这是我的代码,不起作用:

Device.OpenUri(new Uri("ms-word:ofe|u|https://calibre-ebook.com/downloads/demos/demo.docx"));

请帮助我! 谢谢!

2 个答案:

答案 0 :(得分:0)

您在这里要问的是可以使用iOS中的简单WebView来完成的:

首先,创建一个自定义WebView类,使您可以选择文件uri:

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

}

然后在ios中使用相同的渲染器并执行以下操作:

  [assembly: ExportRenderer (typeof(CustomWebView), typeof(CustomWebViewRenderer))]
  namespace DisplayPDF.iOS
 {
   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;
          }
       }
   }
}

然后使用如下所示的自定义控件:

 <local:CustomWebView Uri="FooPath" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" /> 

FooPath 是文档文件的路径。

答案 1 :(得分:0)

我对我的项目有解决方案,请尝试:

如果仅在iOS上打开文件.docx,则可以在iOS的共享代码中编写代码:

  1. 检查用户的设备是否具有设置应用程序(Word,Excel,PP等...)

    public static bool HasSetupAppDocument(string extension)
    {
        if (string.IsNullOrEmpty(extension))
            return false;
    
        // Device has setup app?
        var result = UIApplication.SharedApplication.CanOpenUrl(NSUrl.FromString($"{extension}"));
        return result;
    }
    

(例如:extensionms-word:ms-excel:ms-excel:

参考https://docs.microsoft.com/en-us/office/client-developer/integration/integrate-with-office-from-ios-applications#office-protocols

注释:将源添加到Info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>ms-word</string>
     <string>ms-excel</string>
     <string>ms-powerpoint</string>
</array>
  1. 在类依赖关系中,使用URL打开文件:

    Device.OpenUri(new Uri($"{convertExtension}{url}"));

注意:urlOnedrive上的链接文件共享,并且请确保帐户Onedrive与帐户登录Word应用程序相同(如果已设置安全性)。 / p>

如果文件的模式为Read-only,则应用程序Word将以模式Read-only打开文件。