无法使用文本颜色打印UIWebView。为什么?

时间:2016-11-27 08:33:31

标签: ios swift printing uiwebview airprint

我有UIWebView。我想用AirPrint打印它的内容。我想出了这段代码:

@IBAction func print(_ sender: Any) {
    let printController = UIPrintInteractionController.shared

    let printInfo = UIPrintInfo(dictionary:nil)
    printInfo.outputType = UIPrintInfoOutputType.general
    printInfo.jobName = "some name"
    printController.printInfo = printInfo

    let formatter = webView.viewPrintFormatter()

    formatter.perPageContentInsets = UIEdgeInsets(top: 72, left: 72, bottom: 72, right: 72)
    printController.printFormatter = formatter

    printController.present(animated: true, completionHandler: nil)
}

当我运行应用程序时,打印交互控制器一切正常。

但是,我在html中有类似的东西,因为我想强调一些文字:

<span style="color: #ff0000">some text</span>

“某些文字”在网页视图中显示为红色,但在我查看打印交互控制器中的预览时它是黑色的!换句话说,所有的颜色都消失了!

我尝试将HTML更改为:

<span style="background: #ff0000">some text</span>

但打印预览显示相同。我很惊讶,因为<hr><h3>标记在预览中都呈现得很好。

有没有办法打印彩色文字?

注意:

  • 选择“模拟彩色激光打印机”
  • 我知道我可以截取webview的截图并打印出来。但这不会只打印屏幕上显示的HTML部分吗?

1 个答案:

答案 0 :(得分:1)

看一下CSS的这一部分:

@media print {
  *,
  *:before,
  *:after {
    background: transparent !important;
    color: #000 !important;
    box-shadow: none !important;
    text-shadow: none !important;
  }

@media print部分定义了内容在打印时的外观规则。 link

在此部分中,您有一个*:after元素,该元素会在页面上的每个元素后面应用内容。 link

*:after部分中,您声明了一种黑色(#000)的颜色,甚至通过将此颜色声明为!important来加倍确定黑色 - 使此声明比任何颜色更重要元素本身的颜色声明。 link

所以你有几种方法可以解决这个问题:

  1. 只需从颜色线中删除!important标记:

    颜色:#000;

  2. 从CSS中删除整个颜色线。

  3. 从CSS中删除*:after部分。
  4. 从CSS中删除@media打印部分。
  5. 这一切都取决于你的具体目标。