一尘不染

使用Swift for iOS以编程方式创建和存储PDF文档

swift

我有一个可以查看项目中已经存储的PDF的应用程序。我希望能够创建一个新的PDF文档并将其存储在app目录中,以便以后在已经存在的查看器中查看。将通过var todoList: [String] = []显示在上的数组创建PDF
UITableView。我知道要创建PDF,必须创建文件名,路径和目录。我不知道该怎么做。我在网上看到了有关URL和URL请求的参考,但是我不确定这是否是我想要做的正确方法。有人可以给我一些建议和指导吗?我所能找到的一切都是针对Objective-
C的。


阅读 219

收藏
2020-07-07

共1个答案

一尘不染

我使用此代码创建和保存文件(使用HTML)

func createPDF() {
    let html = "<b>Hello <i>World!</i></b> <p>Generate PDF file from HTML in Swift</p>"
    let fmt = UIMarkupTextPrintFormatter(markupText: html)

    // 2. Assign print formatter to UIPrintPageRenderer

    let render = UIPrintPageRenderer()
    render.addPrintFormatter(fmt, startingAtPageAt: 0)

    // 3. Assign paperRect and printableRect

    let page = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) // A4, 72 dpi
    let printable = page.insetBy(dx: 0, dy: 0)

    render.setValue(NSValue(cgRect: page), forKey: "paperRect")
    render.setValue(NSValue(cgRect: printable), forKey: "printableRect")

    // 4. Create PDF context and draw

    let pdfData = NSMutableData()
    UIGraphicsBeginPDFContextToData(pdfData, .zero, nil)

    for i in 1...render.numberOfPages {
        UIGraphicsBeginPDFPage();
        let bounds = UIGraphicsGetPDFContextBounds()
        render.drawPage(at: i - 1, in: bounds)
    }

    UIGraphicsEndPDFContext();

    // 5. Save PDF file

    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

    pdfData.write(toFile: "\(documentsPath)/file.pdf", atomically: true)
}

然后,UIWebView使用以下代码将其从documents目录加载到其中:

func loadPDF(filename: String) {
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let url = URL(fileURLWithPath: documentsPath, isDirectory: true).appendingPathComponent(filename).appendingPathExtension("pdf")
    let urlRequest = URLRequest(url: url)
    webView.loadRequest(urlRequest)
}
2020-07-07