如何从UIWebView中获取PRINT内容?

时间:2017-12-16 05:53:21

标签: ios swift3 uiwebview uiprintinteractioncntrler

我使用的是swift,我需要打印一张在UIWebView中打开的工作表。

    let url = webView.request?.url
    let stringurl = url?.absoluteString

    let pic = UIPrintInteractionController.shared
    let printInfo : UIPrintInfo = UIPrintInfo(dictionary: nil)

    printInfo.outputType = UIPrintInfoOutputType.general
    printInfo.jobName = stringurl!

    pic.printInfo = printInfo
    pic.printFormatter = webView.viewPrintFormatter()
    pic.showsPageRange = false

    pic.present(animated: true, completionHandler: nil)

2 个答案:

答案 0 :(得分:0)

这是我的解决方案:

在函数UIWebViewDelegate的{​​{1}}中

我们需要将webViewDidFinishLoad函数“重定向”到我们的本机函数中,该函数将负责打印:

window.print

下一步:

open func webViewDidFinishLoad(_ webView: UIWebView) {
    webView.stringByEvaluatingJavaScript(from: "(function(){var originalPrintFn = window.print;window.print = function(){window.location = 'webViewPrintAction';}})();")
}

最后一步实现public func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { if request.url!.absoluteString.contains("webViewPrintAction") { printContent() return false } return true } 功能:

printContent()

现在,当我们在webView中按private func printContent() { let printInfo = UIPrintInfo(dictionary: nil) printInfo.jobName = webView.description printInfo.outputType = .general let printController = UIPrintInteractionController.shared printController.printInfo = printInfo printController.printingItem = webView printController.present(animated: true) } 时(第1张截图),我们将看到iOS原生对话框(第2张截图):

enter image description here

enter image description here

答案 1 :(得分:0)

通过创建图像上下文,然后在Web视图上调用UIImage方法,将Web视图的内容绘制到drawHierarchy(in:afterScreenUpdates:)

然后您可以将生成的图像作为printingItem传递到打印交互控制器。