Cómo mostrar el PDF de NSData en Swift – cómo guardar PDF en la carpeta de documentos Swift – cómo mostrar PDF a partir de guardado NSData a través de WebView en Swift

Tengo un PDF que estoy tirando de una severa que llegó en la forma de NSData y ahora tengo que mostrarlo. He mirado lo largo y ancho de una solución a esto y no he encontrado nada que cierra la brecha entre raw NSData y en realidad guardar o mostrar el PDF.

He probado esto, pero ahora estoy atascado sin saber cómo guardar o mostrar:

let cfData = CFDataCreate(kCFAllocatorDefault, UnsafePointer<UInt8>(data.bytes), data.length)                                                
let cgDataProvider = CGDataProviderCreateWithCFData(cfData)
let cgPDFDocument = CGPDFDocumentCreateWithProvider(cgDataProvider)
InformationsquelleAutor Ethan Parker | 2016-08-05

3 Kommentare

  1. 15

    Primera de todas, que NSData ES su PDF, sin necesidad de convertir a otro tipo de datos o usar una librería para manipular en el momento.

    Por ahora, basta con guardar el NSData a su directorio de documentos en iOS, que no es que una gestión de almacén persistente como CoreData o Reino, ni es UserDefaults. Es una carpeta con material en él.

    Guardar en la Carpeta de Documentos:

    let data = //the stuff from your web request or other method of getting pdf    
    let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
    let filePath = "\(documentsPath)/myCoolPDF.pdf"
    data.writeToFile(filePath, atomically: true)

    Ahora compruebe que el archivo existe y abierto en tu mac. Esto es para asegurarse de que usted ha guardado un PDF real y no otra cosa. Este es un proceso de dos pasos. Primero averigüe en la tierra donde el archivo fue por la impresión de la ubicación de la carpeta documentos del simulador de iOS:

    let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDirectory = paths[0]
    print(documentsDirectory)

    Ahora copia de esa larga ruta de acceso y cd [paste location] en la terminal para ir allí, entonces open myCoolPDF.pdf para abrirlo en la vista previa! Es mágico momento!

    Ahora que usted ha verificado que usted está tratando con un PDF real es momento para mostrar que en un WebView, ya que es bastante simple, a menos que usted tiene su propia manera de hacerlo.

    Tenga en cuenta que usted todavía tiene que hacer lo que el webview muestra, arrastre uno en su viewController en un guión y hacer un IBOutlet para ello.

    let url = NSURL(fileURLWithPath: filePath)
    let webView = UIWebView()
    webView.loadRequest(NSURLRequest(URL: url))

    Obviamente esta es una forma rápida para asegurarse de que obtiene los conceptos básicos de ir, usted no quiere a la fuerza desenvuelva en condiciones de riesgo utilizando !.

    • Si esto se entiende como una P&Una referencia para el futuro, a continuación, tratar de no complicar las cosas innecesarias. El resultado de NSURL(string: "file://" + urlStringPDF!)! es exactamente lo que ya tiene en el url variable. Que hace que la mayoría de los «importantes» de la parte obsoletos. – También el uso de URLByAppendingPathComponent lugar de concatenación de cadenas para construir rutas de acceso de archivo.
    • file:// estaba recibiendo despojado en mi caso cuando he utilizado el .path método de obtención de una cadena a partir de una URL, en mi aplicación estaba pasando una cadena a un webview en otro contexto
    • cierto que usted no necesita para anexar file:// en este caso
    • filePath es una cadena, y url es la dirección URL correspondiente, hasta ahora tan bueno. Luego let urlStringPDF = url.path le da filePath de nuevo, y NSURL(string: "file://" + urlStringPDF!)! le da url de nuevo. Los últimos dos conversiones no son necesarios.
    • editado, por favor, ajuste el voto si ese era su downvote
    • En realidad está mal ahora. A lo que me refería es (a menos que me equivoco): let url = NSURL(fileURLWithPath: filePath); let webView = UIWebView(); webView.loadRequest(NSURLRequest(URL: url)).

  2. 6

    Comenzando con iOS 11 usted no necesita una vista web y pueden utilizar la sala de PDFKit marco. Con PDFKit cargar un PDF a partir de un URL o Data instancia puede ser tan simple como:

    import PDFKit
    
    //some other code here
    //...
    
    let pdfView = PDFView()
    
    //add pdfView to the view hierarchy and possibly add auto-layout constraints
    //...
    
    pdfView.document = PDFDocument(data: data)

    Retirar PDFKit documentación para obtener más detalles.

  3. 2

    Actualización:

    • Xcode 8.1
    • Swift 3.0.1

    Para Guardar Archivos al Directorio de Documentos.

    let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let path = "\(documentPath)/filename.pdf"
    yourData.write(toFile: path, atomically: true)

    Para recuperar la ruta de acceso de Directorio de Documento.

    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
    let documentsDirectory = paths[0]

    Aquí usted puede añadir su nombre de archivo con la barra invertida delante.
    Y se puede comprobar si el archivo existe.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea