我使用的是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)
答案 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张截图):
答案 1 :(得分:0)
通过创建图像上下文,然后在Web视图上调用UIImage
方法,将Web视图的内容绘制到drawHierarchy(in:afterScreenUpdates:)
。
然后您可以将生成的图像作为printingItem
传递到打印交互控制器。