2016-11-27 69 views
1

我有一个UIWebView。我想用AirPrint打印它的内容。我想出了这个代码:无法使用文本颜色打印UIWebView。为什么?

@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> 

“一些文本”出现在Web视图红色,但是当我看到预览它是黑色的在打印交互控制器中!换句话说,所有的颜色都消失了!

我试图将HTML改为:

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

但打印预览出现相同。我很惊讶,因为<hr><h3>标签在预览中全部呈现。

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

注:

  • 没有选择“模拟彩色激光打印机”
  • 我知道我可以把网页视图的屏幕截图和打印。但是,是不是只打印屏幕上显示的HTML部分?
+0

我刚刚设置了一个HTML页面,其中包含引用的确切范围,将其加载到UIWebView中并使用打印代码打印出来,并且看到红色文本。似乎还有其他问题导致了这个问题。你能否提供一个链接到不打印的实际网站? –

+0

@CraigGrummitt对不起,但我似乎无法编辑该问题。这里是我试图编辑的pastebin链接:http://pastebin.com/raw/B87WUivY – Sweeper

+0

Apple有一些代码可以将HTML转换为PDF。我没有尝试过,但也许它会解决你的问题https://github.com/ResearchKit/ResearchKit/blob/4f3d0f33df3ca96764ccac72a2dda729a567ac33/ResearchKit/Common/ORKHTMLPDFWriter.m –

回答

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

这一切都取决于你以后的具体情况。

+0

哦!我不知道你可以定义在css中打印页面的样子!我会尝试的! – Sweeper