简体   繁体   English

如何在iOS中打开PDF文件?

[英]How to open PDF file in iOS?

i try to open a existing PDF file on a iOS device. 我尝试在iOS设备上打开现有的PDF文件。 This file have to be open with the default PDF reader. 该文件必须使用默认的PDF阅读器打开。

In this moment i use the "dependency service" to run native code. 在这一刻,我使用“依赖服务”来运行本机代码。

    public void Save(string filename, byte[] byPDF)
    {
        string strPfad = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), filename);
        if(File.Exists(strPfad))
        {
            File.Delete(strPfad);
            File.WriteAllBytes(strPfad, byPDF);
        }
        else
            File.WriteAllBytes(strPfad, byPDF);

        var viewer = UIDocumentInteractionController.FromUrl(NSUrl.FromFilename(strPfad));
        var controller = GetVisibleViewController();
        viewer.PresentOpenInMenu(controller.View.Frame, controller.View, true);
    }

    private UIViewController GetVisibleViewController(UIViewController controller = null)
    {
        controller = controller ?? UIApplication.SharedApplication.KeyWindow.RootViewController;

        if (controller.PresentedViewController == null)
            return controller;

        if (controller.PresentedViewController is UINavigationController)
        {
            return ((UINavigationController)controller.PresentedViewController).VisibleViewController;
        }

        if (controller.PresentedViewController is UITabBarController)
        {
            return ((UITabBarController)controller.PresentedViewController).SelectedViewController;
        }

        return GetVisibleViewController(controller.PresentedViewController);
    }

If I run this code is nothing happend (only the file becomes written). 如果我运行此代码,则什么也没发生(只有文件被写入)。

I just used a standard UIViewController and passed the path (where the pdf is saved on the device) to the controller and loaded it up in a UIWebview. 我只是使用标准的UIViewController并将路径(将pdf保存在设备上的路径)传递给控制器​​,并将其加载到UIWebview中。

  public class PdfController : UIViewController
{
    public PdfController(string pdfPath)
    {
        NavigationItem.LeftBarButtonItem = new NavBarButton("Back", (sender, args) =>
        {
            NavigationController.PopViewController(true);
        });

        var webView = new UIWebView(View.Bounds);
        View.AddSubview(webView);

        webView.LoadRequest(new NSUrlRequest(new NSUrl(pdfPath, false)));
        webView.ScalesPageToFit = true;
    }
}

But you will need to download it first and pass it to this controller This snippit will allow you download the pdf and save it. 但是您需要先下载它,然后将其传递给此控制器。此代码段可让您下载pdf并保存。

Public void DownloadPDF()
{
       Utility.AddNetworkConnection();
        var webClient = new WebClient();

        loadingView = new LoadingView();
        loadingView.Show("Downloading PDF");

        webClient.DownloadDataCompleted += (s, e) =>
        {
            Utility.RemoveNetworkConnection();
            File.WriteAllBytes(_pdfPathLocation, e.Result); // writes to local storage

            InvokeOnMainThread(() =>
            {
                loadingView.Hide();
                _pdfImageElement.SetValueAndUpdate("Open PDF");
                var a = new UIAlertView("Done", "File downloaded and saved", null, "OK", "Open PDF");
                a.Show();

                a.Clicked += OpenPdf;
            });
        };

        var url = new Uri(_wreck.PdfURL);
        webClient.Encoding = Encoding.UTF8;
        webClient.DownloadDataAsync(url);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM