首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有自定义背景和透明UIMarkupTextPrintFormatter内容的HTML创建

具有自定义背景和透明UIMarkupTextPrintFormatter内容的HTML创建
EN

Stack Overflow用户
提问于 2017-10-03 14:15:13
回答 2查看 1.7K关注 0票数 12

我使用一个UIPrintPageRenderer和一个UIMarkupTextPrintFormatter来打印在UIWebView中呈现的html页面。我试图实现以下目标:我希望将html内容作为透明层呈现到上下文上,但是当在上下文中用UIPrintPageRenderer呈现时,html内容的背景色总是白色的,掩盖了下面的所有内容。

html样式包含以下代码片段:

代码语言:javascript
运行
复制
body {
      background-color: transparent !important;;
      -webkit-print-color-adjust: exact;
}

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

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

代码语言:javascript
运行
复制
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的白色背景所覆盖?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-03 14:22:57

通过切换到不同的UIPrintFormatter解决了这个问题。从UIMarkupTextPrintFormatter切换到UIViewPrintFormatter,这是对透明度的尊重。

票数 1
EN

Stack Overflow用户

发布于 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。如果这对您的用例有效,它可能是一个更好的长期选择。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46546755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档