由于 iOS 14 从 Web 视图创建 PDF 无法正常工作

Posted

技术标签:

【中文标题】由于 iOS 14 从 Web 视图创建 PDF 无法正常工作【英文标题】:Since iOS 14 creating a PDF from a Webview not working correctly 【发布时间】:2020-10-07 12:32:25 【问题描述】:

ios 14 之前,我有一个函数 createPDF_Specs,它可以从 Web 视图为我创建一个 DIN A4 PDF。 然而,从 iOS14 开始,它将 webview 的背景图片(由 htmlString 创建)移动到 PDF 中的第二个站点。奇怪的是,webview 显示正确。

第一张图片展示了 Web 视图的显示方式,第二张展示了 PDF 的结束方式。

func createPDF_Specs(formatter: UIViewPrintFormatter, filename: String) -> String 
        // From: https://gist.github.com/nyg/b8cd742250826cb1471f
        
        // 2. Assign print formatter to UIPrintPageRenderer
        let render = UIPrintPageRenderer()
        
        
        render.addPrintFormatter(formatter, startingAtPageAt: 0)
        
    
        // 3. Assign paperRect and printableRect
        let page = CGRect(x: 0, y: 0, width: 841.8, height: 595.2) // A4, 72 dpi
        let printable = page.insetBy(dx: -3, dy: -3)
    
        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, page, nil)
    
    print(render.numberOfPages, "Number of pages")
        for i in 1...render.numberOfPages 
            
            UIGraphicsBeginPDFPage();
            let bounds = UIGraphicsGetPDFContextBounds()
            print(bounds)
         //   render.drawPage(at: i - 1, in: bounds)
            render.drawPage(at: i - 1, in: page)
        
        
        UIGraphicsEndPDFContext()
        
        // 5. Save PDF file
        let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0]
        let filePath = "\(documentsPath)/\(filename).pdf"
        pdfPath = URL(string: filePath)
        pdfData.write(toFile: filePath, atomically: true)
        print("open \(filePath)")
        
        return filePath

【问题讨论】:

【参考方案1】:

答案:这是一个苹果虫。我向 Apple 报告了它,他们用 iOS 14.1 修复了它

【讨论】:

以上是关于由于 iOS 14 从 Web 视图创建 PDF 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

从特定视图创建 PDF 文件

如何在 Swift 中的 PDF 上绘制一些东西?

使用 swift 代码将 web 视图上的 pdf 共享到其他设备

Android Web 视图不显示 PDF

Android 从布局视图创建和打印 pdf

我们可以在 iOS 上使用 UIWebView 打开 pdf 文件吗?