Buenas tardes, les presento una traducci贸n de un art铆culo sobre el trabajo de PDF en Swift.
Cualquier persona interesada, bienvenido a cat.
Estoy trabajando en una aplicaci贸n que deber铆a poder descargar archivos PDF, guardarlos y abrirlos. Para esta tarea, debe realizar 3 pasos:
- Downloadtask
- Gesti贸n de archivos
- Pdfview
Paso 1. DownloadTaskPara descargar un archivo a trav茅s de una URL, debe usar downloadTask. Tambi茅n es necesario rastrear d贸nde se han movido nuestros archivos, por lo que el observador, que en mi caso es
ViewController , debe admitir
URLSessionDownloadDelegate .
import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } @IBAction func downloadButtonPressed(_ sender: Any) { guard let url = URL(string: "https://www.tutorialspoint.com/swift/swift_tutorial.pdf") else { return } let urlSession = URLSession(configuration: .default, delegate: self, delegateQueue: OperationQueue()) let downloadTask = urlSession.downloadTask(with: url) downloadTask.resume() } } extension ViewController: URLSessionDownloadDelegate { func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { print("downloadLocation:", location) } }
Para comprender d贸nde se guard贸 el archivo, simplemente imprima el resultado de la variable de
ubicaci贸n en la consola Xcode.
Despu茅s de hacer clic en el bot贸n "Descargar", el archivo se descarg贸 en menos de un segundo y luego fue eliminado por el sistema. Este comportamiento se repite tanto en el simulador como en el dispositivo real.
Paso 2. Administraci贸n de archivosCada aplicaci贸n en iOS tiene su propio entorno de prueba. En su interior hay 3 componentes que todo desarrollador de iOS debe conocer: Bundle Container, Data Container e iCloud Container. En este art铆culo, consideraremos solo el Contenedor de datos con m谩s detalle, ya que lo necesitaremos para nuestra tarea: descargar un archivo PDF.

Usando el contenedor de datos, podemos administrar archivos guardados desde Internet. A continuaci贸n enumerar茅 las propiedades importantes:
- Los archivos dentro de la biblioteca , as铆 como los archivos tmp se eliminar谩n autom谩ticamente
- iTunes realiza una copia de seguridad de todos los archivos excepto Caches, tmp y archivos designados como .isExcludedFromBackup = true . Durante la revisi贸n de la aplicaci贸n, si Apple encuentra en iTines archivos guardados que no deber铆an estar all铆, lo m谩s probable es que la aplicaci贸n sea rechazada.
- Los archivos guardados deben almacenarse en Documentos .
De ello se deduce que nuestro siguiente paso es guardar el archivo de tmp a Documentos. Esto es lo que hice:
- Copi茅 el nombre del archivo pdf
- URL creada en documentos
- Se elimin贸 un archivo con el mismo nombre para evitar un error de copia: "CFNetworkDownload_mdrFNb.tmp" no se pudo copiar a "Documentos" porque ya existe un elemento con el mismo nombre.
- Copi茅 el archivo a Documentos.
extension ViewController: URLSessionDownloadDelegate { func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { print("downloadLocation:", location)
Paso 3. PDFViewEntonces, movimos el archivo PDF, y ahora el usuario tiene acceso a 茅l. Ahora veamos c贸mo abrirlo con el PDFView integrado en PDFKit, el pr谩ctico marco de trabajo de Apple disponible con iOS 11.
Aunque muchos tutoriales PDFKit usan el
gui贸n gr谩fico para crear un PDFView utilizando la propiedad UIView, esto no se puede hacer a trav茅s de
Xibs . Por lo tanto, lo crear茅 a trav茅s del c贸digo.
@IBAction func openPDFButtonPressed(_ sender: Any) { let pdfViewController = PDFViewController() pdfViewController.pdfURL = self.pdfURL present(pdfViewController, animated: false, completion: nil) }
import UIKit import PDFKit class PDFViewController: UIViewController { var pdfView = PDFView() var pdfURL: URL! override func viewDidLoad() { super.viewDidLoad() view.addSubview(pdfView) if let document = PDFDocument(url: pdfURL) { pdfView.document = document } DispatchQueue.main.asyncAfter(deadline: .now()+3) { self.dismiss(animated: true, completion: nil) } } override func viewDidLayoutSubviews() { pdfView.frame = view.frame } }

Voila! Extrajimos y abrimos el archivo PDF. S茅 que el formato del libro es un poco diferente, por lo que
veremos PDFKit con m谩s
detalle en el pr贸ximo art铆culo .