如何使用swift下载和共享pdf文件

时间:2019-05-08 05:30:05

标签: ios swift url

在我正在构建的应用程序中,我必须生成一个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 ""
            }
        }
    }

我在Internet上找到了一个有用的示例,它准确地解释了我必须做的事情。但是我的问题在于,EXAMPLE开发人员正在访问公共URL,而应该加载保存的PDF文件(已存储)。请帮助我修改代码。

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

  

expected output image 这是预期的输出,但是应该获取pdf而不是获取图像文件

1 个答案:

答案 0 :(得分:0)

所以您只想加载以前保存的文件?

执行相同的操作以访问文件名和路径,然后读取内容。

globals().update(combination_dict)
print(cejst)
cejest

完整示例:

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

let data = Data(contentsOf: pdfPath)

输出:

  

[DEBUG]结果为Optional(“ Helloooooo world”)