2

我正在使用 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)
4

2 回答 2

0

这是我的解决方案:

UIWebViewDelegate函数中,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()功能:

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

现在,当我们按下printwebView(第一个屏幕截图)时,我们将看到 iOS 原生对话框(第二个屏幕截图):

在此处输入图像描述

在此处输入图像描述

于 2018-06-18T18:02:03.000 回答
0

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

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

于 2019-11-18T12:22:41.983 回答