Как скачать и поделиться PDF-файл, используя Swift - PullRequest
0 голосов
/ 08 мая 2019

В приложении, которое я создаю, мне нужно создать файл PDF, а затем поделиться им по электронной почте, WhatsApp и т. Д.

В настоящее время я следовал приведенному ниже коду для создания PDF.

    import UIKit

    class ViewController: UIViewController {
        @IBOutlet weak var masterContainerView: UIView!
        @IBOutlet weak var pdfButton: UIButton!

        @IBAction func generatePDFtapped(_ sender: Any) {
            pdfButton.isHidden = true
            generatePDF()
            pdfButton.isHidden = false
        }

        func generatePDF() {
            let pdfWrittenPath = masterContainerView.exportAsPdfFromView()
            print("PDF written at \(pdfWrittenPath)")
        }
    }

Приведенный выше код является контроллером представления и файл класса это:

    import Foundation
    import UIKit

    //to call this, use the <viewoutletname>.exportAsPdfFromView()

    extension UIView {
        // Export pdf from Save pdf in directory and return pdf file path


        func exportAsPdfFromView() -> String {
            let pdfPageFrame = self.bounds
            let pdfData = NSMutableData()
            UIGraphicsBeginPDFContextToData(pdfData, pdfPageFrame, nil)
            UIGraphicsBeginPDFPageWithInfo(pdfPageFrame, nil)
            guard let pdfContext = UIGraphicsGetCurrentContext() else { return "" }
            self.layer.render(in: pdfContext)
            UIGraphicsEndPDFContext()
            return self.saveViewPdf(data: pdfData)

        }

        // Save pdf file in document directory
        func saveViewPdf(data: NSMutableData) -> String {
            let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
            let docDirectoryPath = paths[0]
            let pdfPath = docDirectoryPath.appendingPathComponent("viewPdf.pdf")
            if data.write(to: pdfPath, atomically: true) {
                return pdfPath.path
                print("PDF written at path \(pdfPath.path)")
            } else {
                return ""
            }
        }
    }

Я нашел полезный пример в Интернете, который точно объясняет, что я должен делать. Но моя проблема в том, что EXAMPLE разработчик обращается к общедоступному URL, вместо этого он должен загрузить сохраненный файл PDF (который сохраняется). Пожалуйста, помогите мне изменить код.

https://github.com/mansi-cherry/iOSHowTo-s/blob/master/documentInteractionDemo/documentInteractionDemo/ViewController.swift


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

1 Ответ

0 голосов
/ 08 мая 2019

То есть вы просто хотите загрузить ранее сохраненный файл?

Сделайте то же самое, чтобы получить доступ к имени файла и пути, а затем прочитать содержимое.

let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
let docDirectoryPath = paths.first
let pdfPath = docDirectoryPath.appendingPathComponent("viewPdf.pdf")

let data = Data(contentsOf: pdfPath)

Полный пример:

class ViewController: UIViewController {

    let dataString = "Helloooooo world"

    override func viewDidLoad() {
        super.viewDidLoad()

        saveFile()
        readFile()
    }

    func saveFile() {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let docDirectoryPath = paths.first
        let pdfPath = docDirectoryPath?.appendingPathComponent("test.txt")

        let data = dataString.data(using: .utf8)
        try? data?.write(to: pdfPath!)
    }

    func readFile() {
        let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
        let docDirectoryPath = paths.first
        let pdfPath = docDirectoryPath?.appendingPathComponent("test.txt")

        let data = try? Data(contentsOf: pdfPath!)
        let str = String(bytes: data!, encoding: .utf8)
        print("[DEBUG] result is \(str)")
    }
}

Выход:

Результат [DEBUG] является необязательным ("Helloooooo world")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...