Téléchargez, enregistrez et visualisez le PDF dans Swift

Bonjour, je présente à votre attention une traduction d'un article sur le travail du PDF dans Swift.
Toute personne intéressée, bienvenue au chat.

Je travaille sur une application qui devrait pouvoir télécharger des fichiers PDF, les enregistrer et les ouvrir. Pour cette tâche, vous devez effectuer 3 étapes:

  • Downloadtask
  • Gestion des fichiers
  • Pdfview

Étape 1. DownloadTask

Pour télécharger un fichier via une URL, vous devez utiliser downloadTask. Il est également nécessaire de suivre où nos fichiers ont été déplacés, de sorte que l'observateur, qui dans mon cas est le ViewController , doit prendre en charge 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) } } 

Afin de comprendre où le fichier a été enregistré, imprimez simplement la sortie de la variable d' emplacement dans la console Xcode.

Après avoir cliqué sur le bouton "Télécharger", le fichier téléchargé en moins d'une seconde, puis a été tué par le système. Ce comportement se répète à la fois sur le simulateur et sur l'appareil réel.

image

Étape 2. Gestion des fichiers

Chaque application dans iOS possède son propre environnement de test. À l'intérieur, il y a 3 composants que chaque développeur iOS doit connaître: Bundle Container, Data Container et iCloud Container. Dans cet article, nous ne considérerons que le conteneur de données plus en détail, car nous en aurons besoin pour notre tâche - télécharger un fichier PDF.

image

À l'aide du conteneur de données, nous pouvons gérer les fichiers enregistrés sur Internet. Ci-dessous, je vais énumérer les propriétés importantes:

  • Les fichiers à l'intérieur de la bibliothèque , ainsi que les fichiers tmp seront automatiquement supprimés
  • iTunes sauvegarde tous les fichiers sauf les caches, tmp et les fichiers désignés par .isExcludedFromBackup = true . Lors de l'examen de l'application, si Apple trouve dans iTines des fichiers enregistrés qui ne devraient pas y être, l'application sera probablement rejetée.
  • Les fichiers enregistrés doivent être stockés dans Documents .

Il s'ensuit que notre prochaine étape consiste à enregistrer le fichier de tmp dans Documents. Voici ce que j'ai fait:

  1. J'ai copié le nom du fichier pdf
  2. URL créée dans les documents
  3. Suppression d'un fichier du même nom pour éviter une erreur de copie: «CFNetworkDownload_mdrFNb.tmp» n'a pas pu être copié dans «Documents» car un élément du même nom existe déjà.
  4. Copié le fichier dans Documents.

 extension ViewController: URLSessionDownloadDelegate { func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { print("downloadLocation:", location) // create destination URL with the original pdf name guard let url = downloadTask.originalRequest?.url else { return } let documentsPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let destinationURL = documentsPath.appendingPathComponent(url.lastPathComponent) // delete original copy try? FileManager.default.removeItem(at: destinationURL) // copy from temp to Document do { try FileManager.default.copyItem(at: location, to: destinationURL) self.pdfURL = destinationURL } catch let error { print("Copy Error: \(error.localizedDescription)") } } } 

image

Étape 3. PDFView

Nous avons donc déplacé le fichier PDF et maintenant l'utilisateur y a accès. Voyons maintenant comment l'ouvrir à l'aide de PDFView intégré à PDFKit, le cadre pratique d'Apple disponible avec iOS 11.

Bien que de nombreux didacticiels PDFKit utilisent le storyboard pour créer un PDFView à l'aide de la propriété UIView, cela ne peut pas être fait via Xibs . Par conséquent, je vais le créer via le code.

 @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 } } 

image

Voila! Nous avons extrait et ouvert le fichier PDF. Je sais que le format du livre est un peu différent, c'est pourquoi nous examinerons PDFKit plus en détail dans le prochain article .

Source: https://habr.com/ru/post/fr430860/


All Articles