Загружайте, Сохраняйте И Просматривайте Pdf В Swift

Добрый день, представляю вашему вниманию перевод статьи о работе с PDF в Swift. Кому интересно, добро пожаловать под кат. Я работаю над приложением, которое сможет загружать PDF-файлы, сохранять их и открывать.

Для выполнения этой задачи вам необходимо выполнить 3 шага:

  • ЗагрузкаЗадачи
  • Управление файлами
  • PDFView
Шаг 1. Загрузка задачи Чтобы загрузить файл по URL-адресу, вам необходимо использовать downloadTask. Нам также необходимо отслеживать, куда переместились наши файлы, поэтому наблюдатель, которым в моем случае является Вьюконтроллер , должен поддерживать 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) } }

Чтобы понять, куда был сохранен файл, достаточно распечатать вывод переменной в консоли Xcode. расположение .

После того, как я нажал кнопку «Загрузить», файл загрузился менее чем за секунду, а затем был уничтожен системой.

Такое поведение повторяется как на симуляторе, так и на реальном устройстве.



Загружайте, сохраняйте и просматривайте PDF в Swift

Шаг 2: Управление файлами Каждое приложение в iOS имеет собственную среду тестирования.

Внутри него есть 3 компонента, которые должен знать каждый разработчик iOS: Bundle Container, Data Container и iCloud Container. В этой статье мы подробно рассмотрим только Контейнер данных, так как он понадобится нам для нашей задачи — загрузки PDF-файла.



Загружайте, сохраняйте и просматривайте PDF в Swift

Используя контейнер данных, мы можем управлять файлами, сохраненными из Интернета.

Ниже я перечислю важные свойства:

  • Файлы внутри Библиотека , и tmp файлы будут автоматически удалены
  • iTunes создает резервные копии всех файлов, кроме Кэши, tmp и файлы, обозначенные как .

    isExcludedFromBackup = правда .

    Если во время проверки приложения Apple обнаружит в iTines сохраненные файлы, которых там быть не должно, приложение, скорее всего, будет отклонено.

  • Сохраненные файлы должны храниться в Документы .

Отсюда следует, что следующим нашим шагом будет сохранение файла из tmp в Documents. Вот что я сделал:
  1. Скопировал название PDF-файла.

  2. Создал URL в Документах
  3. Я удалил файл с таким же именем, чтобы избежать ошибок копирования: «CFNetworkDownload_mdrFNb.tmp» не удалось скопировать в «Документы», поскольку элемент с таким именем уже существует.
  4. Скопировал файл в Документы.



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)") } } }



Загружайте, сохраняйте и просматривайте PDF в Swift

Шаг 3. Просмотр PDF-файла Итак, мы переместили PDF-файл и теперь у пользователя есть к нему доступ.

Давайте теперь разберемся, как его открыть с помощью PDFView, встроенного в PDFKit — удобный фреймворк от Apple, доступный с iOS 11. Хотя во многих руководствах PDFKit используется раскадровка чтобы создать PDFView с использованием свойства UIView, через Ксибс этого сделать нельзя.

Поэтому я создам его с помощью кода.



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



Загружайте, сохраняйте и просматривайте PDF в Swift

Вуаля! Мы извлекли и открыли PDF-файл.

Я знаю, что формат книги немного другой, поэтому рассмотрим поподробнее PDFKit в следующей статье .

Теги: #Разработка для iOS #Разработка мобильных приложений #ios разработка #урок #перевод с английского

Вместе с данным постом часто просматривают: