Просмотр PDF документов - PullRequest
       47

Просмотр PDF документов

1 голос
/ 23 октября 2019

У меня есть таблица с именами PDF-документов. Ранее было 3 документа, и каждый из них имеет свой собственный ViewController. Как я могу сделать так, чтобы с сотнями документов я выбрал один из таблицы и показал его в представлении, если я выберу другой документ, то в том же представлении покажу другой документ.

, пока у меня естьтакая функция, где я подставил название документов в каждом классе и показал его в разных представлениях. Но теперь мне нужно отобразить все на одном ViewController при выборе любого документа

import UIKit
import PDFKit

class pdfViewClass {


class func filePDfFunc(nameFile: String, formatFile:String, 
nameView:PDFView)
{
    if let path = Bundle.main.path(forResource: nameFile,  
ofType:formatFile) {

if let pdfDocument = PDFDocument(url: URL(fileURLWithPath: 
path)) {

 nameView.autoScales = true
           nameView.displayDirection = .vertical
          nameView.document = pdfDocument


        }
    }
    }
}

Ответы [ 2 ]

1 голос
/ 12 ноября 2019

Вы можете использовать Native Apple UIDocumentInteractionController для просмотра PDF-файла.

Создайте функцию, подобную приведенной ниже для просмотра PDF

func viewPdf(urlPath: String, screenTitle: String) {
    // open pdf for booking id
    guard let url = urlPath.toUrl else {
        print("Please pass valid url")
        return
    }

    self.downloadPdf(fileURL: url, screenTitle: screenTitle) { localPdf in
        if let url = localPdf {
            DispatchQueue.main.sync {
                self.openDocument(atURL: url, screenTitle: screenTitle)
            }
        }
    }
}

Функция для загрузки PDF

   // method  for download pdf file
func downloadPdf(fileURL: URL, screenTitle: String, complition: @escaping ((URL?) -> Void)) {
    // Create destination URL
    if let documentsUrl: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
        let destinationFileUrl = documentsUrl.appendingPathComponent("\(screenTitle).pdf")

        if FileManager.default.fileExists(atPath: destinationFileUrl.path) {
            try? FileManager.default.removeItem(at: destinationFileUrl)
        }

        let sessionConfig = URLSessionConfiguration.default
        let session = URLSession(configuration: sessionConfig)

        let request = URLRequest(url: fileURL)

        let task = session.downloadTask(with: request) { tempLocalUrl, response, error in
            if let tempLocalUrl = tempLocalUrl, error == nil {
                // Success
                if let statusCode = (response as? HTTPURLResponse)?.statusCode {
                    print("Successfully downloaded. Status code: \(statusCode)")
                }

                do {
                    try FileManager.default.copyItem(at: tempLocalUrl, to: destinationFileUrl)
                    complition(destinationFileUrl)
                } catch let writeError {
                    print("Error creating a file \(destinationFileUrl) : \(writeError)")
                }

            } else {
                print("Error took place while downloading a file. Error description: \(error?.localizedDescription ?? "N/A")")
            }
        }
        task.resume()
    } else {
        complition(nil)
    }
}

Функция для открытых документов

    func openDocument(atURL url: URL, screenTitle: String) {
    self.documentInteractionController.url = url
    self.documentInteractionController.name = screenTitle
    self.documentInteractionController.delegate = self
    self.documentInteractionController.presentPreview(animated: true)
}

При нажатии на tableView передается определенный индекс URL

viewPdf(urlPath: "http://www.africau.edu/images/default/sample.pdf", screenTitle: "Tesing Document")
0 голосов
/ 23 октября 2019

Вы можете сделать это с помощью WKWebView легко. Используйте WKWebView для загрузки вашего PDF документа.

...