我使用一个UIPrintPageRenderer
和一个UIMarkupTextPrintFormatter
来打印在UIWebView
中呈现的html页面。我试图实现以下目标:我希望将html内容作为透明层呈现到上下文上,但是当在上下文中用UIPrintPageRenderer
呈现时,html内容的背景色总是白色的,掩盖了下面的所有内容。
html样式包含以下代码片段:
body {
background-color: transparent !important;;
-webkit-print-color-adjust: exact;
}
在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()
我的问题是,在"background.png“上呈现的html内容不是透明的,而是有白色背景的。UIPrintPageRenderer
似乎忽略了html样式中的透明属性。将html样式中的background-color
设置为例如,blue
将呈现的html背景颜色从白色更改为蓝色。我还试图通过使用context.clear(printableRect)
使上下文透明,从而使呈现的html透明,但没有效果。
如何使UIPrintPageRenderer
以透明的背景打印html内容,从而使上下文中已经呈现的背景不被html的白色背景所覆盖?
发布于 2018-04-03 14:22:57
通过切换到不同的UIPrintFormatter
解决了这个问题。从UIMarkupTextPrintFormatter
切换到UIViewPrintFormatter
,这是对透明度的尊重。
发布于 2017-10-10 18:43:13
这不是一个保证,但正如Yvonne所提到的,您的PDF渲染器可能只是不支持将transparent
作为颜色值。
可能的解决办法A
尝试创建一个只有100%透明像素的1pxx1pxPNG图像,然后将其设置为元素上的重复背景图像。
可能的解决办法B
当这个库呈现它时,HTML元素本身可能是白色的。您可以将CSS应用于html
标记,就像处理body
一样。
可能的解决办法C
如果我正确理解了您的情况,您将尝试在其他应用程序内容的基础上覆盖UIWebView中呈现的PDF。我不能说PDF是否真的能支持透明性。UIWebView可能有它自己需要的属性(更不用说还有一个默认背景为白色的PDF查看器)。如果您控制了UIWebView的样式,请查看以下内容:How to make a transparent UIWebView
可能的解决办法D
也许最好使用画布( HTML或Switft)来呈现图像,而不是PDF。如果这对您的用例有效,它可能是一个更好的长期选择。
https://stackoverflow.com/questions/46546755
复制相似问题