由于 iOS 14 从 Webview 创建 PDF 无法正常工作

Since iOS 14 creating a PDF from a Webview not working correctly

在 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
}

答:这是一个 apple bug。我向 Apple 报告了它,他们用 iOS 14.1

修复了它