如何从URL显示PDF文件并在WebView中显示

时间:2017-11-02 10:54:51

标签: android webview

我有一个recyleView,显示客户账单列表,当点击账单我需要显示详细账单(账单网址 - 当浏览器上的URL下载为PDF时 - 需要进行身份验证)我使用下面的代码来下载PDF,我可以将PDF下载我的问题

a)如何在webView中显示此内容

b)有没有其他方法可以向用户显示此PDF而无需下载/写入外部导演

 if(ContextCompat.checkSelfPermission(getActivity(),
                        Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
                    webView.setDownloadListener(new DownloadListener() {

                        public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long contentLength) {
                            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));

                            request.setMimeType(mimeType);
                            //------------------------COOKIE!!------------------------
                            String cookies = CookieManager.getInstance().getCookie(url);
                            request.addRequestHeader("cookie", cookies);
                            //------------------------COOKIE!!------------------------
                            request.addRequestHeader("User-Agent", userAgent);
                            request.setDescription("Downloading file...");
                            request.setTitle(URLUtil.guessFileName(url, contentDisposition, mimeType));
                            request.allowScanningByMediaScanner();
                            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, URLUtil.guessFileName(url, contentDisposition, mimeType));
                            DownloadManager dm = (DownloadManager) getActivity().getSystemService(Context.DOWNLOAD_SERVICE);
                            dm.enqueue(request);
                            Toast.makeText(getActivity().getApplicationContext(), "Downloading File", Toast.LENGTH_LONG).show();
                        }
                    });

                }else{
                    if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)){
                        Toast.makeText(getActivity(),
                                "External storage permission required to save billing statements",
                                Toast.LENGTH_SHORT).show();
                    }
                    requestPermissions(new String[] {Manifest.permission.WRITE_EXTERNAL_STORAGE},
                            REQUEST_EXTERNAL_STORAGE_RESULT);
                }

1 个答案:

答案 0 :(得分:1)

  

如何在webView中显示此内容

WebView没有呈现PDF的本机功能。您可以使用Mozilla PDF.jsWebView中呈现PDF,但这仅适用于Android 4.4+,并且需要对PDF.js本身进行一些小调整。

  

有没有其他方法可以向用户显示此PDF而无需下载/写入外部导演

您可以将其下载到内部存储空间(例如getFilesDir()getCacheDir()),通过FileProvider投放文件,并使用ACTION_VIEW允许用户查看PDF使用他们喜欢的PDF查看器。

对于Android 5.0+上的有限PDF,Android SDK中有PdfRendererpdfium可用于Android,但它相当大。有关PDF查看选项的更多信息,请参阅this blog post

您还可以研究商业PDF渲染库。