Android Web 视图不显示 PDF
Posted
技术标签:
【中文标题】Android Web 视图不显示 PDF【英文标题】:Android Web view not displaying PDF 【发布时间】:2019-11-26 04:15:47 【问题描述】:我有一个在浏览器上显示 PDF 的 URL,我创建了一个 WebView
,但它没有显示 pdf。
我已经为WebView
和WebViewClient
提供了所有设置,但是ProgressBar
刚刚启动并且没有加载pdf。
class KnowledgeShareWebview : AppCompatActivity()
lateinit var webView: WebView
lateinit var progressBar: ProgressBar
var url = ""
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_knowledge_share_webview)
webView = findViewById(R.id.webView)
progressBar = findViewById(R.id.progressBar)
if (intent != null)
url = intent.getStringExtra("url")
Helper.printMessege(KnowledgeShareWebview::class.java.simpleName, "url....$url")
initWebView()
webView.loadUrl(url)
private fun initWebView()
webView.settings.loadWithOverviewMode = true
webView.settings.useWideViewPort = true
webView.clearCache(true)
webView.clearHistory()
webView.settings.javascriptEnabled = true
webView.settings.useWideViewPort = true
webView.isHorizontalScrollBarEnabled = false
webView.webViewClient = object : WebViewClient()
override fun onPageStarted(view: WebView, url: String, favicon: Bitmap)
super.onPageStarted(view, url, favicon)
progressBar.visibility = View.VISIBLE
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean
webView.loadUrl(url)
return super.shouldOverrideUrlLoading(view, url)
override fun onPageFinished(view: WebView, url: String)
super.onPageFinished(view, url)
progressBar.visibility = View.GONE
invalidateOptionsMenu()
override fun onReceivedError(view: WebView, request: WebResourceRequest, error: WebResourceError)
super.onReceivedError(view, request, error)
progressBar.visibility = View.GONE
【问题讨论】:
你能显示你想加载的网址吗? @AnasMehar 抱歉我无法显示,但它是一个普通的 pdf 网址 你可以试试这个docs.google.com/gview?embedded=true&url="YourUrl"WebView
没有显示 PDF 的内置功能。它支持 Web 内容(html、CSS、JavaScript),而不是任意其他类型的文件。工作时,您可以use pdf.js
渲染 PDF。或者,use other options for rendering PDFs.
【参考方案1】:
android 能够在WebView
中显示 PDF 文档。但是,WebView
不包含允许您显示 PDF 文档的 PDF 插件。一种解决方案是使用 Intent 对象来启动可以处理 PDF 文档的第三方应用程序(例如 Adobe Acrobat)。但是,这会将控制权转移到 thrid-party
应用程序。
如果您坚持使用WebView
显示PDF 文档,您可以使用以下技巧。您可以使用 Google Docs 打开您的 PDF 文档,然后使用 WebView
加载 Google Docs 的 URL。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
WebView webView=new WebView(MainActivity.this);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginState(PluginState.ON);
//---you need this to prevent the webview from
// launching another browser when a url
// redirection occurs---
webView.setWebViewClient(new Callback());
String pdfURL = "url";
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);
【讨论】:
【参考方案2】:你必须调用 webview.load(url)。
webView.Settings.JavaScriptEnabled = true;
webView.Settings.SupportZoom();
webView.Settings.SetAppCacheEnabled(true);
webView.Settings.DomStorageEnabled = true;
webView.ZoomOut();
webView.ZoomIn();
webView.Settings.BuiltInZoomControls = true;
webView.Settings.LoadWithOverviewMode = true;
webView.Settings.UseWideViewPort = true;
//webview.Settings.SetSupportZoom (true);
webView.Settings.SetPluginState(WebSettings.PluginState.On);
webView.Settings.GetPluginState();
webView.LoadUrl(externalurl);
//after loading url call the webviewclient
webView.SetWebViewClient(new MonkeyWebViewClient(imgViewBack, imgViewForward, imgRefresh));
webView.SetWebChromeClient(new WebChromeClient());
【讨论】:
嗨,我也是这样调用的,但它只会在 onPageStarted 之前得到回调 我认为您应该在调用 webviewclient 之前先调用 load url。试试看吧!!我认为我们不需要大部分被覆盖的方法,直到我们必须在视图正在加载或即将加载时做一些事情。以上是关于Android Web 视图不显示 PDF的主要内容,如果未能解决你的问题,请参考以下文章
KendoUI forcePageBreak不显示长局部视图
如何在 Android 的 WebView 中显示 PDF?
我可以在不显示 web 视图的情况下使用 phonegap 吗?