2016-02-19 33 views
0

我正尝试在我的应用程序中创建并保存PDF报告。我搜索并发现this -- Create and store PDF document programmatically using Swift for iOS真的很有帮助,它从html创建pdf很好,但它不适用于<img>。我希望徽标出现在我的报告/ pdf中。在swift中创建并保存包含图像的PDF

它工作和图像显示,当我在浏览器上尝试它,但图片没有保存到PDF后,我检查文件。我搜索并尝试做一个base64编码的图像,但也失败了。

或者有没有更好的方法来设计和创建漂亮的PDF报告?

在此先感谢。

回答

1

我一直在这一段时间,终于有所突破

因为您加载HTML字符串,它不会对图像的工作,你必须加载HTML的Web视图,然后给UIViewPrintFormatter格式为_webVeiw.viewPrintFormatter()

另外不要忘记设置baseURLUIWebView否则它不会加载本地图像。

请看我的要点寻求更多帮助。

Generate PDF from html iOS swift

创建分页符时,我也有很多麻烦,所以我创建了多个HTML的,以适应这一点。

希望它能帮助,请让我知道如果你需要任何更多信息:)

+0

对不起,迟到的回复,我不小心留下我的Mac在办公室。 我可以知道你说的_webView是什么吗? 它是webview的出路吗? – Lee

+0

我尝试了你的建议,但在webview中加载会影响字体和大小。并为您的自定义类,我什么也看不到,除了你的页脚 – Lee

+0

_webview是一个简单的UIWebView,是它的一个插座, 请检查https://gist.github.com/vinbhai4u/899869df4f1538ffc7d6#file-pdf-creation -from-ios-swift – vinbhai4u

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)