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

Can't print UIWebView with text color. Why?

我有一个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>

"some text"在网页视图中显示为红色,但在打印交互控制器中查看预览时显示为黑色!也就是说,所有的颜色都没有了!

我尝试将 HTML 更改为:

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

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

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

备注:

看看你的这一部分 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. 中删除整个颜色线
  4. 从 CSS.
  5. 中删除 *:after 部分
  6. 从您的 CSS 中删除 @media 打印部分。

这完全取决于您的具体追求。