Pregunta Abre un archivo PDF usando swift


¿Cómo puedo agregar un archivo PDF para una aplicación, donde haces clic en un botón para ver el archivo y cuando terminas vuelves a la pantalla en la que estabas?


23
2017-11-12 09:48


origen


Respuestas:


Si simplemente desea ver un archivo PDF, puede cargarlo en 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 desea obtener más, un buen marco es PSPDFKit.


43
2017-11-12 09:51



Para Xcode 8.1 y Swift 3.0

Guarde el archivo PDF en cualquier carpeta de su xcode. Supongamos que el nombre del archivo es 'Nombre de archivo.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)        
  }

Lo mismo aplicará si quiere abrir cualquier archivo html.


14
2018-01-05 14:17



puede usar UIDocumentInteractionController para obtener una vista previa del archivo en IOS. En el archivo del controlador de vista, agregue una propiedad de tipo UIDocumentInteractionController

e implementar un método de delegado simple de ella

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

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

no te olvides de agregar UIDocumentInteractionControllerDelegate en la clase de control de vista


11
2018-02-08 07:08



SWIFT 4+

Si tiene que abrir el archivo desde la memoria caché local / Documentdiectory que tiene la ruta del archivo 

Método 1: usar 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étodo 2: usar 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

8
2017-12-28 10:32



También puede usar Quick Look Framework de Apple.

Es muy flexible

Puede mostrar su archivo PDF con la función de zoom.

También tiene soporte para todos los demás tipos (como png, jpg, docx, txt, rtf, xlsx, zip, mov, etc.) de archivos y es muy fácil de usar.

Consulte esta Responda si desea una descripción detallada del uso de QuickLook.framework


2
2017-09-28 09:48



Apple agregó PDFKit marco en iOS 11 

Agregue un UIView a su controlador de vista y conviértalo en clase para 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
            }
        }
    }
}

Hay 4 modos de visualización: singlePage, singlePageContinuous, twoUp, twoUpContinuous .


1
2018-05-23 12:18



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
2017-10-28 06:47



Puedes usar este código en Swift 4

  1. Importar PDFKit
  2. Copia este código

    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
    }
    

0
2018-06-19 10:24