UIMarkupTextPrintFormatter使用自定义背景和透明HTML内容创建PDF

chr*_*low 11 html css printing cgcontext swift

我正在使用a UIPrintPageRenderer与a UIMarkupTextPrintFormatter一起打印一个html页面,该页面呈现在UIWebView.我试图实现以下目标:我想将html内容作为透明层渲染到上下文中,但是当使用UIPrintPageRenderer上下文覆盖下面的所有内容进行渲染时,html内容的背景颜色始终为白色.

html样式包含以下代码段:

body {
      background-color: transparent !important;;
      -webkit-print-color-adjust: exact;
}
Run Code Online (Sandbox Code Playgroud)

UIWebView我可以看到html的背景确实是透明的,因为我将背景设置UIWebView为不同的颜色.

这是我用于创建PDF数据的代码:

let printPageRenderer = UIPrintPageRenderer()
let printFormatter = UIMarkupTextPrintFormatter(markupText: htmlContent)
printPageRenderer.addPrintFormatter(printFormatter, startingAtPageAt: 0)

let data = NSMutableData()
UIGraphicsBeginPDFContextToData(data, Constants.Pdf.rect, nil)
let context = UIGraphicsGetCurrentContext()!

for i in 0..<printPageRenderer.numberOfPages {
    UIGraphicsBeginPDFPage()

    let backCoverView = UIView(frame: Constants.Pdf.rect)
    backCoverView.backgroundColor = UIColor(patternImage: UIImage(named: "background.png")!)
    backCoverView.layer.render(in: context)

    context.clear(printableRect)

    printPageRenderer.setValue(NSValue(cgRect: printableRect), forKey: "printableRect")
    printPageRenderer.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
}

UIGraphicsEndPDFContext()
Run Code Online (Sandbox Code Playgroud)

我的问题是通过"background.png"呈现的html内容不透明但具有白色背景.html样式中的透明属性似乎被忽略了UIPrintPageRenderer.将background-colorhtml样式设置为例如blue将渲染的html背景颜色从白色更改为蓝色.我也尝试通过使上下文透明而使得渲染的html透明context.clear(printableRect)无济于事.

如何 UIPrintPageRenderer使用透明背景打印html内容,以便上下文中已渲染的背景不被html的白色背景覆盖?

chr*_*low 1

通过切换到不同的UIPrintFormatter. 从尊重透明度切换UIMarkupTextPrintFormatter到尊重透明度。UIViewPrintFormatter