Как распечатать все содержимое WKWebView On и Offscreen OSX и iOS
Этот вопрос касается печати ВСЕГО контента (включая содержимое экрана) WKWebView. В настоящее время (по-прежнему, с IOS 10.2 или OSX 10.12) нет никакого рабочего решения, и ни одно из предполагаемых решений в Stackoverflow не работает. Предоставьте здесь только ответ, если вы сами подтвердили, что можете распечатать OFF SCREEN CONTENT, и если вы это сделали, укажите рабочий пример кода.
Я пытаюсь напечатать ВСЕ содержимое WKWebView или WebView на OSX 10.10 или выше (в настоящее время работает 10.11.2). Например, широкая таблица html, в которой столбцы не видны и выходят вправо. Более ранние версии OSX автоматически разбивали на страницы и корректно печатали весь html.
Я попытался использовать решения, доступные здесь, в Stackoverflow и в других местах. Все по существу говорят то же самое, что и печатать documentView
следующим образом:
[[NSPrintOperation printOperationWithView:_webView.mainFrame.frameView.documentView printInfo:pInfo] runOperation];
Это перестало работать для WKWebView или WebView в 10.10. Если вы это сделаете:
[[NSPrintOperation printOperationWithView:_wkWebView printInfo:pInfo] runOperation];
Вы получаете разбивку на страницы, но распечатка включает в себя полосы прокрутки WebView
, а другая WKWebView
дает пустые страницы.
Я не могу найти упоминания в документации Apple о печати для WKWebView в OSX. Я также не могу найти ответ, специфичный для OSX, а не iOS.
Кто-нибудь знает, как печатать их на OSX?
ОБНОВЛЕНИЕ. Это ошибка в WebView [Радар: 23159060], а WKWebView даже не отображается для печати на OSX. Изучив Open Source для этого класса в сети, я вижу, что все классов, которые имеют какое-либо отношение к печати, находятся в блоке условной компиляции, который поддерживает только платформу: iOS.
ОБНОВЛЕНИЕ Part Deux. Удивительно, что эта смешная ошибка существует во всех реализациях этого класса, в том числе в iOS! Мне показалось смешным, что это еще не исправлено в этот поздний срок, несмотря на выражение о документации, чтобы использовать этот (и только этот класс) в приложениях, поддерживающих iOS 8 или выше. Теперь НЕВОЗМОЖНО распечатать весь экран и выкл. контент WebView на iOS или OSX. Ошибка Apple. Время исправить это! Мы все знаем, что Стив сказал бы об этом....
Примечание.. Кроме того, я считаю, что основной причиной этой проблемы является то, что также не позволяет сохранить ВСЕ содержимое WKWebView в качестве изображения. Раньше были некоторые методы, которые можно использовать с UIWebView для сохранения всего содержимого и внеэкранного содержимого WebView для изображения. Я еще не нашел рабочего решения.
Ответы
Ответ 1
Я исчерпал все возможные способы печати WKWebView напрямую без успеха. Единственным обходным решением, которое я могу придумать, было бы преобразование веб-страницы в объект PDF, а затем печать указанного объекта. Я обновлю код, если у меня получится обходной путь.
Ответ 2
В iOS я передаю UIView.viewPrintFormatter() в UIActivityViewController, чтобы позволить пользователям печатать все
let myShare = [webView.viewPrintFormatter()]
let avc = UIActivityViewController(activityItems: myShare, applicationActivities: nil)
present(avc, animated: true, completion: nil)