【发布时间】:2017-10-03 14:15:13
【问题描述】:
我正在使用UIPrintPageRenderer 和UIMarkupTextPrintFormatter 来打印在UIWebView 中呈现的html 页面。我正在努力实现以下目标:
我想将 html 内容作为透明层渲染到上下文中,但是当在上下文中使用 UIPrintPageRenderer 渲染覆盖下面的所有内容时,html 内容的背景颜色始终为白色。
html样式包含如下代码sn-p:
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 内容不是透明的,而是具有白色背景。 html 样式中的 transparent 属性似乎被UIPrintPageRenderer 忽略了。将 html 样式中的 background-color 设置为例如blue 将渲染的 html 背景颜色从白色更改为蓝色。我还尝试通过使用 context.clear(printableRect) 使上下文透明来使呈现的 html 透明,但无济于事。
如何让UIPrintPageRenderer 打印具有透明背景的 html 内容,以便上下文中已经呈现的背景不会被 html 的白色背景覆盖?
【问题讨论】:
-
我没有用过 UIPrintPageRenderer,但我用过 TCPDF(一个类似的 PDF 生成器),而且 TCPDF 只支持 HTML 4,如果我没记错的话,它不支持透明度。
标签: html css swift printing cgcontext