我正在使用 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)
这是我的解决方案:
在 UIWebViewDelegate
函数 webViewDidFinishLoad
中,我们需要将 window.print
函数“重定向”到我们将负责打印的 native 函数:
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)
}
现在,当我们在 webView 中按 print
时(第一张截图),我们将看到 iOS 原生对话框(第二张截图):
关于ios - 如何从 UIWebView 打印内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47842965/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |