无法使用WebView打开PDF文件

4
我尝试使用 WebView 中的 URL 显示 PDF 文件。虽然 WebView 可以加载像 google.com 这样的网页,但当我尝试加载 PDF 的 URL 时,它没有加载任何内容或抛出任何异常。该 URL 可以在 Google Chrome 桌面浏览器中加载 PDF,因此我猜测问题不在 URL 本身。
以下是我目前编写的代码:
加载 PDF 的 Fragment 的 onCreateView():
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_brochure, container, false);
        webView = view.findViewById(R.id.webView);
//        webView.loadUrl("https://google.com");
        webView.loadUrl("https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf");
//        webView.loadUrl(brochureUrl);
        // Enable Javascript
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setSupportZoom(true);

        // Force links and redirects to open in the WebView instead of in a browser
        webView.setWebViewClient(new WebViewClient());
        return view;
    }

布局(xml文件):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/purple_500"
    tools:context=".ui.project_details.project_details_pages.BrochureFragment">

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="28dp"/>

</LinearLayout>

清单文件(我认为相关的部分)

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:allowBackup="true"
        ...
        ...
        ...
        android:supportsRtl="true"
        android:usesCleartextTraffic="true">

我想知道我错过了什么。另外,如果我能学会如何调试这种问题就太好了。


WebView无法显示PDF文档。 - blackapps
@blackapps,可以的。虽然我不确定显示机制是否与标准的PDF阅读器相同。 - ganjaam
1
不行。WebView是用于显示HTML文档的。而且答案中的示例并不显示PDF,而是使用了谷歌的PDF转HTML转换器,你可以在URL上看到。 - blackapps
1个回答

5

在使用webView加载PDF时存在一些问题。您可以使用以下代码来解决您的问题。该方法利用Google Drive帮助在webView中查看PDF。最后,请告诉我您的问题是否已解决。

webview.getSettings().setJavaScriptEnabled(true); 
    String pdf = "https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf";
    webview.loadUrl("https://drive.google.com/viewerng/viewer?embedded=true&url=" + pdf);

成功了!不过,我还得做一些小调整。我需要将webView的layout_height设置为'match parent',并在对webview.getSettings()进行更改后再加载URL。我原以为.load()可能会触发一个线程,所以顺序可能无关紧要。但现在我认为这未必是正确的。 - ganjaam
对于Android 7,似乎出现了水平滚动条,这非常令人烦恼... - gumuruh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接