要在 webview 中加载 pdf,您必须设置一些 webview 设置。这就是我在 webview 中加载 pdf 的方式。它对我有用:
private fun init() {
val bundle = intent.extras
if (bundle != null) {
pdfFile = bundle.getString(IntentValue.pdfFile)!!
slug = bundle.getString(IntentValue.title)!!
webView.scrollBarStyle = View.SCROLLBARS_OUTSIDE_OVERLAY
webView.settings.javaScriptEnabled = true
webView.settings.allowFileAccessFromFileURLs = true
webView.settings.allowUniversalAccessFromFileURLs = true
webView.settings.builtInZoomControls = true
webView.settings.javaScriptEnabled = true
webView.settings.pluginState = WebSettings.PluginState.ON
webView.settings.domStorageEnabled = true
webView.settings.loadWithOverviewMode = true
webView.loadUrl("https://docs.google.com/viewer?url=$pdfFile")
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView, url: String) {
if (view.title.equals("")) {
progress.visibility = View.VISIBLE
view.reload()
} else {
progress.visibility = View.GONE
}
view.settings.loadsImagesAutomatically = true
}
override fun shouldOverrideUrlLoading(view: WebView, url: String?): Boolean {
if (url!!.endsWith(".pdf")) {
val intent = Intent(Intent.ACTION_VIEW)
intent.setDataAndType(Uri.parse(url), "application/pdf")
try {
startActivity(intent)
} catch (e: ActivityNotFoundException) {
}
} else {
webView.loadUrl("https://docs.google.com/viewer?url=$pdfFile")
}
return true
}
override fun onReceivedError(
view: WebView?,
errorCode: Int,
description: String?,
failingUrl: String?
) {
toast(description!!)
}
}
}
if (getStoragePermission()) {
if (checkDocumentDownloaded("$slug.pdf")) {
ivDownload.setImageResource(R.drawable.ic_downloaded)
} else {
ivDownload.setImageResource(R.drawable.ic_download)
}
}
clickListener()
}
private fun checkPageFinished() {
if (webView.contentHeight === 0) {
webView.postDelayed(
{
webView.loadUrl("https://docs.google.com/viewer?url=$pdfFile")
},
1000
)
webView.postDelayed(
{
if (webView.contentHeight === 0) {
checkPageFinished()
}
},
1500
)
}
}