2017-03-13 173 views
1

我嘗試在iOS設備上打開現有的PDF文件。 這個文件必須用默認的PDF閱讀器打開。如何在iOS中打開PDF文件?

在這一刻我使用「依賴服務」來運行本機代碼。

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

如果我運行此代碼沒有任何意外(只有文件被寫入)。

回答

2

我剛剛使用了一個標準的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; 
    } 
} 

但是你需要先下載它,並把它傳遞給這個控制器 這SNIPPIT將允許您下載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); 
} 
+0

該文件是當前存在的。 – Nyxero

+0

頂部片段pdfPath是手機上的文件位置。這將打開下載的PDF – InitLipton