Android Webview иногда не может отобразить pdf и вместо этого показывает пустую / белую страницу - PullRequest
2 голосов
/ 24 апреля 2019
  • Открыть PDF-файл в веб-просмотре с помощью Google Docs
  • Снова и снова открывайте один и тот же pdf или другой pdf.
  • Иногда на андроиде будет отображаться пустая / белая страница, пока мы не обновим веб-страницу снова 1 или 2 раза.

Я сделал образец в формате PDF. Ссылка на проект показана ниже:

https://github.com/gopalawasthi123/PdfWebView

Надеюсь, это поможет вам лучше.

public void SetWebView(WebView webview,string externalUrl){
            webview.Tag = "webview";
            webview.Settings.JavaScriptEnabled = true;
            webview.Settings.SupportZoom ();
            webview.Settings.SetAppCacheEnabled(true);
            webview.Settings.DomStorageEnabled = true;
            webview.ZoomOut ();
            webview.ZoomIn ();
            webview.Settings.BuiltInZoomControls = true;
            webview.Settings.LoadWithOverviewMode = true;
            webview.Settings.UseWideViewPort = true;
            //webview.Settings.SetSupportZoom (true);
            webview.Settings.SetPluginState (WebSettings.PluginState.On);
            webview.Settings.GetPluginState ();
            if (externalUrl.StartsWith("http://") || externalUrl.StartsWith("https://"))
                webview.LoadUrl (externalUrl);
            webview.SetWebViewClient (new MonkeyWebViewClient (imgViewBack, imgViewForward, imgRefresh));
            webview.SetWebChromeClient (new WebChromeClient ());
        }

1 Ответ

0 голосов
/ 25 апреля 2019

После тестирования второго PDF-файла URL, WebView, похоже, не может загрузить большой PDF-файл.

Причина:

WebView отображает HTML. Тот факт, что это работает вообще, является хакером, который преобразует простые PDF-файлы в HTML. Не похоже, что они поддерживают что-то такое большое. Даже если бы они это сделали, я бы ожидал, что загрузка PDF-файла с большой страницей, преобразованного в HTML, будет настолько большой, что я сильно сомневаюсь, что вы сможете загрузить его без использования OOM. Используйте соответствующую библиотеку PDF, создайте реальный вид PDF-рендеринга и старайтесь не рендерить больше PDF-файлов за раз, чем вам нужно (иначе вы все равно получите OOM). Другими словами, не полагайтесь на хакерские решения, на которые вы никогда не должны были полагаться.

Решение:

Вам следует попробовать альтернативы, такие как PDF.js , работающие локально на вашем устройстве, вместо службы, такой как предварительный просмотр Документов Google. (Или сначала загрузить PDF в локальный путь к файлу)

Поместите его в папку с активами и настройте пример:

wv.loadUrl("file:///android_asset/web/viewer.html");

Кроме того, могут возникать ситуации с нехваткой памяти. В качестве альтернативы можно использовать встроенную программу просмотра, например AndroidPdfViewer .

.
...