尝试在 webview 中打开在线 PDF 文件时,我没有收到可用的预览消息

Posted

技术标签:

【中文标题】尝试在 webview 中打开在线 PDF 文件时,我没有收到可用的预览消息【英文标题】:I'm getting no preview available message when try to Open online PDF file in webview 【发布时间】:2019-03-17 13:46:37 【问题描述】:

我的代码是这样的 WebView webview = new WebView(getActivity());

    webview.getSettings().setjavascriptEnabled(true);

   final ProgressDialog progDailog = ProgressDialog.show(getActivity(), "Loading", "Please wait...", true);
    progDailog.setCancelable(false);


    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setUseWideViewPort(true);
    webview.getSettings().setPluginState(WebSettings.PluginState.ON);

// webview.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)); //以下几行显示加载器,直到下载 pdf 文件以供查看。 webview.setWebViewClient(新的 WebViewClient()

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url)
        
            progDailog.show();
            view.loadUrl(url);

            return true;
        

        @Override
        public void onPageFinished(WebView view, final String url)
        
            progDailog.dismiss();
        
    );
    try 
        String urlEncoded = URLEncoder.encode(pdf, "UTF-8");
        pdf = "http://docs.google.com/viewer?url=" + urlEncoded;
     catch (UnsupportedEncodingException e) 
        e.printStackTrace();
    
   String pdf = "http://192.168.2.154:8080/streamline/res/INV-000015.pdf";
    webview.loadUrl("http://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf);

【问题讨论】:

【参考方案1】:

192.168.2.154 是您本地网络上的一台机器。 docs.google.com 无法访问它。 docs.google.com 只能访问公共 IP 地址上的公共 URL。

也许你可以考虑other options for viewing PDFs。

【讨论】:

这是正确答案。您无法访问 pdf,因为您使用 pdf 的本地 IP。尝试将其部署到公共域,它应该可以正常工作。您可能会考虑其他选项,例如 Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(pdfLink)); startActivity(browserIntent); 但请注意,此解决方案可能无法在较低版本的 android bellow 7 上正常工作。我在使用三星设备时遇到了一些问题,尤其是使用三星互联网等默认浏览器。跨度> 【参考方案2】:

这对我有用...我所做的是在将其与 url 连接之前将 url 解析为 Uri 并且一切正常。以下是我的代码:

// sets visibility to visible
progressBar.setVisibility(View.VISIBLE);


// displaying document in webview
String url = Uri.encode(fileUrl);


document_viewer.getSettings().setJavaScriptEnabled(true);
document_viewer.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
document_viewer.getSettings().setBuiltInZoomControls(true);
document_viewer.getSettings().setUseWideViewPort(true);
//document_viewer.getSettings().setPluginState(WebSettings.PluginState.ON);
// loads documentUrl into webView
document_viewer.loadUrl("http://docs.google.com/gview?embedded=true&url="+url);

document_viewer.setWebViewClient(new WebViewClient() 

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) 

        super.onPageStarted(view, url, favicon);
        // sets visibility to visible
        progressBar.setVisibility(View.VISIBLE);

    

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) 
        view.loadUrl(url);
        return false;
    
    @Override
    public void onPageFinished(WebView view, String url) 
        // do your stuff here
        // sets visibility of progressBar to gone
        progressBar.setVisibility(View.GONE);

        // sets visibility of webView to visible
        document_viewer.setVisibility(View.VISIBLE);

        // setting the details of document on text Views
        title.setText(" Title : " + documentTitle);
        tag.setText(" Tag : " + documentTag);
        type.setText(" Type : " + documentType);
        comment.setText(" Comment : " + documentComment);
        distributee.setText(" Distributee : "  + documentDistributee);
    

    @Override
    public void onReceivedError(WebView view, int errorCode,
                                String description, String failingUrl) 
        view.loadUrl("about:blank");
        Toast.makeText(getApplicationContext(), getResources().getString(R.string.error_occurred), Toast.LENGTH_LONG).show();
        super.onReceivedError(view, errorCode, description, failingUrl);
    

);

希望对您有所帮助。谢谢

【讨论】:

以上是关于尝试在 webview 中打开在线 PDF 文件时,我没有收到可用的预览消息的主要内容,如果未能解决你的问题,请参考以下文章

在 WebView 中打开 PDF 文件

如何在 WebView Android Studio 中打开本地 pdf 文件

在同一活动的webview中打开pdf文件

在应用程序中打开资产文件 pdf

Android 操作快速查看 - 文件问题 - 尝试打开远程 pdf 文档

Android - 在 webview 中加载 PDF