【问题标题】:How to load large pdf file in Android into my webview如何将 Android 中的大型 pdf 文件加载到我的 webview 中
【发布时间】:2016-10-05 06:03:39
【问题描述】:

我无法将大型 pdf 文件(有 900 页)加载到我的 webview 在我的 android 应用程序中,我尝试使用此代码并在任何 其他pdf,但是当我尝试打开一个大的pdf时,它显示:没有预览 可用。

        wvReport.getSettings().setJavaScriptEnabled(true);
    wvReport.getSettings().setAllowFileAccess(true);
    wvReport.getSettings().setAllowContentAccess(true);

    wvReport.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return true;
        }
        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
            Toast.makeText(ReportsViewActivity.this, "Oh no! " , Toast.LENGTH_SHORT).show();
        }

    });

    wvReport.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int progress) {
            if (progress == 100) {
                progressBar.setVisibility(View.INVISIBLE);
                progressBar.setProgress(0);
            } else {
                progressBar.setVisibility(View.VISIBLE);
                progressBar.setProgress(progress);
            }
        }

        @Override
        public void onReceivedTitle(WebView view, String title) {

        }
    });
    wvReport.loadUrl("http://docs.google.com/viewer?url="+url);

【问题讨论】:

    标签: android pdf webview


    【解决方案1】:

    试试这个代码:

        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
        startActivity(browserIntent);
    

    它正在工作,所以如果 pdf 太大,将通过 pdf 查看器下载并打开。

    【讨论】:

      【解决方案2】:

      你没有。 Webviews 显示 html。这完全有效的事实是通过黑客 - 谷歌将简单的 pdf 转换为 html。他们似乎不支持那么大的东西。即使他们这样做了,我希望加载转换为 html 的 900 页 pdf 会非常大,我非常怀疑您是否能够在不 OOM 的情况下加载它。使用适当的 pdf 库,制作真正的 pdf 渲染视图,并确保一次渲染的 pdf 不会超出您的需要(否则您无论如何都会去 OOM)。换句话说,不要依赖你一开始就不应该依赖的 hacky 解决方案。

      【讨论】:

        【解决方案3】:

        您应该尝试在您的设备上本地运行 PDF.js 等替代方案,而不是像 Google Docs preview 这样的服务。

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

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

        此外,正如@gabe-sechan 所提到的,您可能会遇到内存不足的情况。尝试的替代方法是使用本地查看器,例如 AndroidPdfViewer

        【讨论】:

        • AndroidPdfViewer 在打开大型 PDF 文件时是否会阻止 OOM?请回复。
        • 在这种情况下我没有经验。在这种情况下,它应该比 PDF.js 做得更好,但我不能说 OOM 是否永远不会发生。
        猜你喜欢
        • 1970-01-01
        • 2014-08-15
        • 2018-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-18
        相关资源
        最近更新 更多