首页 > 解决方案 > 如何从 UIWebview 生成 PDF

问题描述

无法在 iOS 设备上从 HTML 模板生成 PDF。它渲染除图像 [ 本地以及服务器端图像之外的所有其他内容。甚至使用了 UIWebview(因为我的应用程序最小 iOS 目标是 10.3),但仍然无法呈现为 pdf。我已经成功地在 UIWebview 上显示了预览,但是当涉及到 pdf 时,我只得到动态文本,没有别的。

@objc func downloadPDF(){

    let render = UIPrintPageRenderer()
    render.addPrintFormatter(webView.viewPrintFormatter(), startingAtPageAt: 0);


    let page = CGRect(x: 0, y: 10, width: webView.frame.size.width, height: webView.frame.size.height) // take the size of the webView
    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, CGRect.zero, nil)
    for i in 1...render.numberOfPages {

        UIGraphicsBeginPDFPage();
        let bounds = UIGraphicsGetPDFContextBounds()
        render.drawPage(at: i - 1, in: bounds)
    }
    UIGraphicsEndPDFContext();
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

    print(documentsPath)

    pdfData.write(toFile: "\(documentsPath)/\(self.pdfTitle).pdf", atomically: true)
    AppConfigurations.shared.popAlert(To: "PDF Generate", for: documentsPath, callingView: self)
    self.pdfPath = "\(documentsPath)/\(self.pdfTitle).pdf"

}

@objc func downloadPDF(){

    let render = UIPrintPageRenderer()
    render.addPrintFormatter(webView.viewPrintFormatter(), startingAtPageAt: 0);


    let page = CGRect(x: 0, y: 10, width: webView.frame.size.width, height: webView.frame.size.height) // take the size of the webView
    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, CGRect.zero, nil)
    for i in 1...render.numberOfPages {

        UIGraphicsBeginPDFPage();
        let bounds = UIGraphicsGetPDFContextBounds()
        render.drawPage(at: i - 1, in: bounds)
    }
    UIGraphicsEndPDFContext();
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]

    print(documentsPath)

    pdfData.write(toFile: "\(documentsPath)/\(self.pdfTitle).pdf", atomically: true)
    AppConfigurations.shared.popAlert(To: "PDF Generate", for: documentsPath, callingView: self)
    self.pdfPath = "\(documentsPath)/\(self.pdfTitle).pdf"

}

我的期望是我想生成具有正确背景图像和 html 样式的 PDF 以及本地和服务器端图像。

标签: swiftxcodeuiwebview

解决方案


推荐阅读