web-dev-qa-db-fra.com

Ouvrir PDF déposer en utilisant swift

Comment puis-je ajouter un fichier PDF pour une application, où vous cliquez sur un bouton pour afficher le fichier & lorsque vous avez terminé, vous revenez à l'écran où vous vous trouviez?

25
user3706773

Si vous souhaitez simplement afficher un fichier PDF, vous pouvez le charger dans un UIWebView. 

let url : NSURL! = NSURL(string: "http://developer.Apple.com/iphone/library/documentation/UIKit/Reference/UIWebView_Class/UIWebView_Class.pdf")
webView.loadRequest(NSURLRequest(URL: url))

Swift 4.1:

let url: URL! = URL(string: "http://developer.Apple.com/iphone/library/documentation/UIKit/Reference/UIWebView_Class/UIWebView_Class.pdf")
webView.loadRequest(URLRequest(url: url))

Si vous souhaitez obtenir plus, un bon cadre est PSPDFKit

50
Jasper Blues

Swift 4+

Si doit ouvrir le fichier à partir du cache local/Documentdiectory qui a le chemin du fichier 

Méthode 1: utiliser UIDocumentInteractionController

class ViewController: UIViewController,UIDocumentInteractionControllerDelegate {
   //let path =  Bundle.main.path(forResource: "Guide", ofType: ".pdf")!
    let dc = UIDocumentInteractionController(url: URL(fileURLWithPath: path))
    dc.delegate = self
    dc.presentPreview(animated: true)
 }
   //MARK: UIDocumentInteractionController delegates
func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
     return self//or use return self.navigationController for fetching app navigation bar colour
 }

Méthode 2: utilisation de WebView

  let webview = WKWebView(frame: UIScreen.main.bounds)
  view.addSubview(webview)
  webview.navigationDelegate = self
  webview.load(URLRequest(url: URL(fileURLWithPath: path)))//URL(string: "http://") for web URL
16
Jack

Pour Xcode 8.1 et Swift 3.0

Enregistrez le fichier PDF dans n’importe quel dossier de votre xcode . Supposons que le nom du fichier soit 'Filename.pdf'

 if let pdf = Bundle.main.url(forResource: "Filename", withExtension: "pdf", subdirectory: nil, localization: nil)  {
    let req = NSURLRequest(url: pdf)
    yourWebViewOutletName.loadRequest(req as URLRequest)        
  }

Idem s’applique si vous voulez ouvrir n’importe quel fichier html.

14
Anil shukla

vous pouvez utiliser UIDocumentInteractionController pour prévisualiser un fichier dans IOS. Dans le fichier du contrôleur de vue, ajoutez une propriété de type UIDocumentInteractionController

et implémenter une méthode de délégué simple

self.documentInteractionController = UIDocumentInteractionController.init(URL: url)
self.documentInteractionController?.delegate = self
self.documentInteractionController?.presentPreviewAnimated(t‌​rue) 

func documentInteractionControllerViewControllerForPreview(controller: UIDocumentInteractionController) -> UIViewController {
    return self
}

n'oubliez pas d'ajouter UIDocumentInteractionControllerDelegate dans la classe du contrôleur de vue

12
Shan Shafiq

Apple a ajouté PDFKit framework in iOS 11 

Ajoutez un UIView à votre contrôleur de vue et définissez sa classe en PDFView

 enter image description here

import UIKit
import PDFKit

class ViewController: UIViewController {

    @IBOutlet var pdfView: PDFView!

    override func viewDidLoad() {
        super.viewDidLoad()

        if let path = Bundle.main.path(forResource: "sample", ofType: "pdf") {
            if let pdfDocument = PDFDocument(url: URL(fileURLWithPath: path)) {
                pdfView.displayMode = .singlePageContinuous
                pdfView.autoScales = true
                pdfView.displayDirection = .vertical
                pdfView.document = pdfDocument
            }
        }
    }
}

Il y a 4 modes d'affichage: singlePage, singlePageContinuous, twoUp, twoUpContinuous.

12
Akila Wasala

Vous pouvez utiliser ce code dans Swift 4

  1. Importer PDFKit
  2. Copiez ce code 

    let pdfView = PDFView()        
    pdfView.translatesAutoresizingMaskIntoConstraints = false
    view.addSubview(pdfView)
    
    pdfView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor).isActive = true
    pdfView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor).isActive = true
    pdfView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor).isActive = true
    pdfView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor).isActive = true
    
    guard let path = Bundle.main.url(forResource: "test", withExtension: "pdf") else { return }
    
    if let document = PDFDocument(url: path) {
        pdfView.document = document
    }
    
2
Enamul Haque

Vous pouvez également utiliser Quick Look Framework d’Apple.

C'est très flexible.

Vous pouvez afficher votre fichier PDF avec la fonction de zoom.

Aussi, vous avez un support pour tous les autres types (comme png, jpg, docx, txt, rtf, xlsx, zip, mov, etc.) de fichiers et il est très facile à utiliser.

Veuillez vous référer à this answer si vous souhaitez une description détaillée de l’utilisation de QuickLook.framework

2
Prashant Gaikwad
let openLink = NSURL(string : self.OtherContactorProfileVview.Result.CertificateList[index].CertificateFileLink)

        if #available(iOS 9.0, *) {
            let svc = SFSafariViewController(url: openLink! as URL)
            present(svc, animated: true, completion: nil)
        } else {
            let port : PDFViewer = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "PDFViewer") as! PDFViewer
            port.strUrl = self.OtherContactorProfileVview.Result.CertificateList[index].CertificateFileLink
            self.navigationController?.pushViewController(port, animated: true)

        }
0
Gaurav Gudaliya