WKWebKit Mac OS NSPrintOperation

WebKit 1 exposed WebFrameView where I could perform a print operation. A.

- (void)webView:(WebView *)sender printFrameView:(WebFrameView *)frameView { NSPrintOperation *printOperation = [frameView printOperationWithPrintInfo:[NSPrintInfo sharedPrintInfo]]; [printOperation runOperation]; } 

In the WKWebKit API, I can’t understand how to perform a similar action or which view to capture for printing. All my efforts came up with blank pages.

+8
source share
2 answers

Surprisingly, WKWebView still does not support printing on macOS, despite the outdated WebView.

Looking at https://github.com/WebKit/webkit/commit/0dfc67a174b79a8a401cf6f60c02150ba27334e5 , printing was implemented several years ago as a private API, but for some reason was not exposed. If you don't mind using a private API, you can print it by adding it to your view controller:

 open override func printOperation(withSettings printSettings: [NSPrintInfo.AttributeKey : Any]) throws -> NSPrintOperation { let printSelector = (Selector("_printOperationWithPrintInfo:")) // https://github.com/WebKit/webkit/commit/0dfc67a174b79a8a401cf6f60c02150ba27334e5 if webView.responds(to: printSelector), let printOperation: NSPrintOperation = webView.perform(printSelector, with: self.printInfo)?.takeUnretainedValue() as? NSPrintOperation { return printOperation } } 
+4
source

Here is a quick marcprux solution in Task C:

  SEL printSelector = NSSelectorFromString(@"_printOperationWithPrintInfo:"); if ([self.webView respondsToSelector:printSelector]) { #pragma clang diagnostic push #pragma clang diagnostic ignored "-Warc-performSelector-leaks" NSPrintOperation *printOperation = (NSPrintOperation*) [self.webView performSelector:printSelector withObject:[NSPrintInfo sharedPrintInfo]]; #pragma clang diagnostic pop return printOperation; } 
0
source

Source: https://habr.com/ru/post/978680/


All Articles