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

标签 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)
}

当我运行该应用程序时,打印交互 Controller 和一切正常。

但是,我在 html 中有这样的东西,因为我想强调一些文本:

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

“some text”在网页 View 中显示为红色,但在打印交互 Controller 中查看预览时显示为黑色!换句话说,所有的颜色都消失了!

我尝试将 HTML 更改为:

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

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

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

注意事项:

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

最佳答案

看看你的 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 打印部分。

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

关于ios - 无法使用文本颜色打印 UIWebView。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40827108/

相关文章:

ios - ld : framework not found libpq

ios - 如何从 TabView 的 subview 导航回 SwiftUI 中的 TabView?

ios - 包含 TableView 的容器 View 根据输入数量 Swift 更改行数

ios - 如何获取 objective-c 中包含毫秒的时间戳的int值

ios - 为什么我的顶部和底部物理主体没有针对 iPad 调整大小?

ios - 用于打开帖子的 Facebook URL 方案

java - 打印居中对齐的二维数组

ios - 可重复使用的 tableview 单元格相互影响而无需交互

css - 使用 Bootstrap 网格强制打印布局的视口(viewport)大小

java - 如何使用非 void 方法打印字符串数组?