在swift中创建并保存包含图像的PDF

时间:2016-02-19 09:41:56

标签: ios swift pdf

我正在尝试为我的应用中的报告创建和保存pdf。我搜索并发现this -- Create and store PDF document programmatically using Swift for iOS非常有用,它从html创建pdf,这很棒,但它不适用于<img>。我希望徽标出现在我的报告/ pdf中。

当我在浏览器上尝试时它显示了工作和图像,但在我检查文件后图像没有保存到pdf中。我已经搜索并尝试执行base64编码的图像,但也失败了。

或者,有没有更好的方法来设计和创建美丽的pdf报告?

提前致谢。

2 个答案:

答案 0 :(得分:2)

我已经有一段时间了,终于有了一些突破

由于您正在加载html字符串,因此无法处理图片,您必须在网络视图中加载html,然后将UIViewPrintFormatter格式设为_webVeiw.viewPrintFormatter()

另外,请不要忘记为baseURL设置UIWebView,否则无法加载本地图片。

请查看我的要点以获得更多帮助。

Generate PDF from html iOS swift

创建分页符时我也遇到了麻烦,因此我创建了多个html以适应这一点。

希望它有所帮助,如果您需要更多信息,请告诉我们。)

答案 1 :(得分:0)

我有同样的问题,试试这段代码:

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

    let paperRect = CGRect(x: 0, y: 0, width: 595.2, height: 841.8)
    let printableRect = paperRect.insetBy(dx: 10, dy: 10)

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

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

    for i in 0 ..< render.numberOfPages {
        UIGraphicsBeginPDFPage()
        let bounds = UIGraphicsGetPDFContextBounds()
        render.drawPage(at: i, in: bounds)
    }
    UIGraphicsEndPDFContext()
    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
    let filePath = "\(documentsPath)/name.pdf"
    pdfData.write(toFile: filePath, atomically: true)

    let url = URL(fileURLWithPath: filePath)
    webView.loadRequest(urlRequest)