Android Webview有时无法呈现pdf,而是显示空白/白色页面

  • 使用谷歌文档在网络视图中打开PDF
  • 一次又一次地打开相同的pdf或不同的pdf。
  • 有时它会在Android中显示空白/白色页面,直到我们再次刷新网页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

您可以重新加载页面,直到它以这种方式显示pdf:

public void onPageFinished(WebView view, String url) {
if (view.getTitle().equals(""))
    view.reload();
}

答案 2

在测试了第二个PDF URL文件后,WebView似乎无法加载大型PDF文件。

原因:

WebView 显示 HTML。事实上,这根本有效是由黑客 - 谷歌将简单的PDF转换为HTML。他们似乎不支持任何大的东西。即使他们这样做了,我也会期望加载一个大页面的PDF转换为HTML会如此之大,我非常怀疑你是否能够在不去OOM的情况下加载它。使用适当的PDF库,制作一个真正的PDF渲染视图,并确保一次不渲染比您需要的更多的PDF(否则无论如何你都会去OOM)。换句话说,不要依赖您一开始就不应该依赖的黑客解决方案。

溶液:

您应该尝试使用PDF.js等替代方案,而不是像Google Docs预览这样的服务。(或先将PDF下载到本地文件路径)

将其放在您的资产文件夹中并调整示例:

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

此外,您可能遇到内存不足的情况。另一种选择是像AndroidPdfViewer这样的本机查看器。


推荐