Unduh, simpan, dan lihat PDF dalam Swift

Selamat siang, saya sajikan untuk Anda terjemahan dari artikel tentang karya PDF di Swift.
Siapa pun yang tertarik, selamat datang ke kucing.

Saya sedang mengerjakan aplikasi yang seharusnya bisa mengunduh file PDF, menyimpannya dan membukanya. Untuk tugas ini, Anda perlu melakukan 3 langkah:

  • Unduhtask
  • Manajemen file
  • Pdfview

Langkah 1. UnduhTask

Untuk mengunduh file melalui URL, Anda harus menggunakan unduhanTask. Juga perlu untuk melacak di mana file kita telah dipindahkan, sehingga pengamat, yang dalam kasus saya adalah ViewController , harus mendukung 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) } } 

Untuk memahami di mana file itu disimpan, cukup cetak output dari variabel lokasi di konsol Xcode.

Setelah saya mengklik tombol "Unduh", file diunduh dalam waktu kurang dari satu detik dan kemudian dibunuh oleh sistem. Perilaku ini diulangi pada simulator dan pada perangkat nyata.

gambar

Langkah 2. Manajemen File

Setiap aplikasi di iOS memiliki lingkungan pengujian sendiri. Di dalamnya ada 3 komponen yang harus diketahui oleh setiap pengembang iOS: Bundle Container, Data Container, dan iCloud Container. Dalam artikel ini, kami hanya akan mempertimbangkan Wadah Data secara lebih rinci, karena kami akan membutuhkannya untuk tugas kami - mengunduh file PDF.

gambar

Dengan menggunakan wadah Data, kita dapat mengelola file yang disimpan dari Internet. Di bawah ini saya akan mendaftar properti-properti penting:

  • File di dalam Perpustakaan , serta file tmp akan dihapus secara otomatis
  • iTunes mencadangkan semua file kecuali Cache, tmp, dan file yang ditunjuk sebagai .isExcludedFromBackup = true . Selama Peninjauan aplikasi, jika Apple menemukan di iTines tersimpan file yang seharusnya tidak ada, kemungkinan besar aplikasi tersebut akan ditolak.
  • File yang disimpan harus disimpan dalam Dokumen .

Maka langkah kami selanjutnya adalah menyimpan file dari tmp ke Documents. Inilah yang saya lakukan:

  1. Saya menyalin nama file pdf
  2. URL yang dibuat di Dokumen
  3. Menghapus file dengan nama yang sama untuk menghindari kesalahan penyalinan: "CFNetworkDownload_mdrFNb.tmp" tidak dapat disalin ke "Dokumen" karena item dengan nama yang sama sudah ada.
  4. Menyalin file ke Dokumen.

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

gambar

Langkah 3. PDFView

Jadi, kami memindahkan file PDF, dan sekarang pengguna memiliki akses ke sana. Sekarang mari kita cari tahu cara membukanya menggunakan PDFView yang dibangun dalam PDFKit, kerangka kerja praktis Apple yang tersedia dengan iOS 11.

Meskipun banyak tutorial PDFKit menggunakan storyboard untuk membuat PDFView menggunakan properti UIView, ini tidak dapat dilakukan melalui Xibs . Karena itu, saya akan membuatnya melalui kode.

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

gambar

Voila! Kami mengekstraksi dan membuka file PDF. Saya tahu bahwa format buku ini sedikit berbeda, itulah sebabnya kita akan melihat PDFKit lebih terinci di artikel selanjutnya .

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


All Articles