当我在没有 .pdf 内容 webview 的情况下加载时没有可用的预览

Posted

技术标签:

【中文标题】当我在没有 .pdf 内容 webview 的情况下加载时没有可用的预览【英文标题】:No Preview available when I load without .pdf content webview 【发布时间】:2020-04-02 04:57:48 【问题描述】:

我尝试在 webview android 中将我的 contant 加载为 PDF,但它显示 No Preview Available 我该如何解决 我的代码在这里:-

webview = (WebView) findViewById(R.id.webview);
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setUseWideViewPort(true);
    webview.getSettings().setjavascriptEnabled(true);
    webview.getSettings().setPluginState(WebSettings.PluginState.ON);
    webview.setWebChromeClient(new WebChromeClient());
    String URLPATH = "http://myaccount365.in/public/oddeve78/report/ledger/11/summaryLedger?fromDate=01/11/2019&toDate=09/12/2019";
    String url = "https://docs.google.com/gview?embedded=true&url=" + URLPATH;
    webview.loadUrl(url);

【问题讨论】:

【参考方案1】:

问题显然是这样的:

您有两个 URL - PDF 的 URL 和 google 文档的 URL。由于您想将一个 URL 作为 GET 参数 (?embedded=true&url=) 传递给另一个 URL,并且您尝试传递的 URL 也包含 GET 参数:@987654323 @ 和 &toDate=,秒 URL 必须是 URLEncoded

所以请打电话

String url = "https://docs.google.com/gview?embedded=true&url=" + URLEncoder.encode(URLPATH, "ISO-8859-1");

然后再试一次。

注意:使用 URLEncoder.encode 时:您总是会遇到这个问题:您可以在没有特定编码的情况下调用 @Deprecated 方法 URLEncoder.encode(String s) 或使用 URLEncoder.encode(String s, String enc) 的首选方法,其中您可以指定编码,但此方法的签名中有throws UnsupportedEncodingException:-O

无论如何,URLEncoder.encode(url)URLEncoder.encode(url, "UTF-8")URLEncoder.encode(url, "ISO-8859-1") 都会产生相同的结果,因为 URL 中没有 UTF-8 或 ISO-8859-1 特定字符:

https://docs.google.com/gview?embedded=true&url=http%3A%2F%2Fmyaccount365.in%2Fpublic%2Foddeve78%2Freport%2Fledger%2F11%2FsummaryLedger%3FfromDate%3D01%2F11%2F2019%26toDate%3D09%2F12%2F2019

【讨论】:

【参考方案2】:

我正在使用它并为我工作:Check Here

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    WebView webView=new WebView(MainActivity.this);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setPluginState(WebSettings.PluginState.ON);
    //---you need this to prevent the webview from
    // launching another browser when a url
    // redirection occurs---
    webView.setWebViewClient(new Callback());

    String pdfURL = "http://www.expertagent.co.uk/asp/in4glestates/16D968D6-198E-4E33-88F4-8A85731CE605/05c36123-4df0-4d7d-811c-8b6686fdd526/external.pdf";
    webView.loadUrl(
            "http://docs.google.com/gview?embedded=true&url=" + pdfURL);

    setContentView(webView);


private class Callback extends WebViewClient 
    @Override
    public boolean shouldOverrideUrlLoading(
            WebView view, String url) 
        return(false);
    

或者试试

我认为确切的问题在于我们与"http://docs.google.com/gview?url=" 连接的 URL 编码。这意味着我们必须用unicode 替换url 的所有特殊字符(:、/、& 等)。 Uri.encode("") 为我们解决问题。

像这样

String url = Uri.encode("your link");
String finalUrl = "http://docs.google.com/viewer?url=" + url + "&embedded=true";

【讨论】:

【参考方案3】:

我认为是您的 pdf 文件 URL 问题,请检查您的 URLPATH 是否返回像这样的 pdf URL https://www.tutorialspoint.com/css/css_tutorial.pdf

我使用这个 URL 它呈现正常

String URLPATH = "https://www.tutorialspoint.com/css/css_tutorial.pdf";
String url = "https://docs.google.com/gview?embedded=true&url=" + URLPATH;
//url:https://docs.google.com/gview?embedded=true&url=https://www.tutorialspoint.com/css/css_tutorial.pdf
webview.loadUrl(url);

【讨论】:

【参考方案4】:

我认为您的 URLPATH 是一个动态 url,它根据参数返回一个文件 url。但现在它可能不会返回正确的 url。它可以检查它,或者您将 URLPATH 更改为具有 http://host:port/path/.pdf 的 url。用它来测试你的代码。

【讨论】:

【参考方案5】:
  String URLPATH = "http://www.pdf995.com/samples/pdf.pdf";
  String url = "https://docs.google.com/gview?embedded=true&url=" + URLPATH;
  webview.loadUrl(url);

【讨论】:

它再次无法正常工作,显示没有可用的预览

以上是关于当我在没有 .pdf 内容 webview 的情况下加载时没有可用的预览的主要内容,如果未能解决你的问题,请参考以下文章

Android webview没有在按钮点击时生成pdf报告

当我在 WEBVIEW 应用程序中单击网站服务器中的链接时,PDF 未加载

android webview没有水平滚动

android webview控件,当控件宽度较小时,自适应问题

无法使用 WebView 打开 PDF 文件

iOS,通过 twitter 和 Facebook 共享 webView 内容(长文本或 .pdf)