Добрый день, представляю вашему вниманию перевод статьи о работе с PDF в Swift. Кому интересно, добро пожаловать под кат. Я работаю над приложением, которое сможет загружать PDF-файлы, сохранять их и открывать.
Для выполнения этой задачи вам необходимо выполнить 3 шага:
- ЗагрузкаЗадачи
- Управление файлами
- PDFView
Чтобы понять, куда был сохранен файл, достаточно распечатать вывод переменной в консоли Xcode. расположение .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) } }
После того, как я нажал кнопку «Загрузить», файл загрузился менее чем за секунду, а затем был уничтожен системой.
Такое поведение повторяется как на симуляторе, так и на реальном устройстве.
Шаг 2: Управление файлами
Каждое приложение в iOS имеет собственную среду тестирования.
Внутри него есть 3 компонента, которые должен знать каждый разработчик iOS: Bundle Container, Data Container и iCloud Container. В этой статье мы подробно рассмотрим только Контейнер данных, так как он понадобится нам для нашей задачи — загрузки PDF-файла.
Используя контейнер данных, мы можем управлять файлами, сохраненными из Интернета.
Ниже я перечислю важные свойства:
- Файлы внутри Библиотека , и tmp файлы будут автоматически удалены
- iTunes создает резервные копии всех файлов, кроме Кэши, tmp и файлы, обозначенные как .
isExcludedFromBackup = правда .
Если во время проверки приложения Apple обнаружит в iTines сохраненные файлы, которых там быть не должно, приложение, скорее всего, будет отклонено.
- Сохраненные файлы должны храниться в Документы .
- Скопировал название PDF-файла.
- Создал URL в Документах
- Я удалил файл с таким же именем, чтобы избежать ошибок копирования: «CFNetworkDownload_mdrFNb.tmp» не удалось скопировать в «Документы», поскольку элемент с таким именем уже существует.
- Скопировал файл в Документы.
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)")
}
}
}
Шаг 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-файл.
Я знаю, что формат книги немного другой, поэтому рассмотрим поподробнее PDFKit в следующей статье .
Теги: #Разработка для iOS #Разработка мобильных приложений #ios разработка #урок #перевод с английского
-
Достижение Невоцерковленных В Вашем Городе
19 Oct, 24 -
Карьерное Обучение Для Cisco Упрощенное
19 Oct, 24 -
Проблема Со Шнурами
19 Oct, 24 -
Переопределение Функций В Php 5.3
19 Oct, 24 -
Как Мы Строили «Дерево Отказов»
19 Oct, 24 -
О Содержании Выше Формы
19 Oct, 24