我想在WebView中打开本地(SD卡)PDF文件。
我已经试过了:
webview = (WebView) findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setPluginsEnabled(true);
webview.getSettings().setAllowFileAccess(true);
File file = new File(Environment.getExternalStorageDirectory() + "/test.pdf");
final Uri uri = Uri.fromFile(file);
webview.loadUrl(uri.toString());
但它仍然无法打开它,所以请告诉我如何在WebView中打开PDF?
9条答案
按热度按时间x9ybnkn61#
我知道,这个问题是老问题了。
但我真的很喜欢Xamarin使用Mozilla的pdf.js的方法。它可以在旧的Android版本上工作,你不需要一个特殊的PDF查看器应用程序,你可以很容易地在你的应用程序视图层次结构中显示PDF。
Git for this:https://mozilla.github.io/pdf.js/
其他默认选项(如标准缩放):https://github.com/mozilla/pdf.js/wiki/Viewer-options
只需将pdfjs文件添加到您的Assets目录:
我们可以这样称呼它:
很酷的一点:如果你想减少功能/控件的数量,请转到Assets/pdfjs/web/viewer.html文件并将某些控件标记为隐藏。
例如,如果您不喜欢右侧的工具栏:
不支持URL方案"file"
可能在较新版本的pdfjs中发生。在版本
1.8.188
中不会出现此错误。uurity8g2#
正如@Sameer在上面的评论中所回复的那样,在webview中查看PDF的唯一解决方案是通过Google Docs的在线查看器,该查看器将呈现并发送一个可读版本到您的应用程序。
之前在此讨论过
8iwquhpp3#
在浏览了几个帖子之后,我在Quora上找到了this简单答案,它几乎完成了这项工作。
在您的gradle文件中添加此依赖关系:
您必须确保您的资源文件夹包含sample_pdf. pdf(库还支持从Uri和SDCard打开pdf)
快乐编码:)
yyyllmsg4#
您不能。使用Intent,您可以在外部查看器应用程序(如Acrobat Reader)中打开PDF:
smtd7mpg5#
从androidOS 5.0(棒棒糖)开始,您可以使用**
PdfRenderer instead of webview/library.
**您可以使用此类在应用程序中显示pdf。如果您想支持低于此级别的操作系统,您可以使用其他答案中提到的库/其他方法,因为没有本地支持。
从docs了解更多信息,您也可以参考此example
j2cgzkjk6#
你可以使用SkewPdfView库从远程或本地url加载pdf。
首先,在您的根build.gradle中添加以下内容:
并将
SkewPdfView
库添加为:现在在布局中包含SkewPdfView:
将所有本地文件保存在assets文件夹中,然后按如下所示使用SkewPdfView。
SkewPdfView库的P.S.链接
SkewPdfView Github Page
cxfofazt7#
WebView不提供从本地存储打开PDF的直接功能。您可以在外部PDFViewer应用程序中打开PDF。
等待,用户将转到其他应用程序。
现在,无需使用任何额外库来打开PDF,我们可以使用PdfRenderer类来渲染PDF。
PdfRenderer可在位图上呈现PDF。位图可绘制到Image View以在应用程序中显示PDF。
从docs了解更多信息。
weylhg0b8#
WebView可以很容易地用于显示来自Web URL的PDF文件,但如果您有本地PDF文件,那么它就变得很痛苦。
在我的情况下,我首先存储了我的本地文件的引用:-
然后,我使用FileProvider获取了本地PDF文件的文件路径URI,并启动了一个Intent,以便使用可以打开PDF文档的现有应用程序打开它:-
同样要使用FileProvider API,您需要在清单中将其声明为:-
并将XML资源文件夹下的file_paths. xml声明为:-
ao218c7q9#
WebView无法打开.pdf文件。最流行的解决方案(谷歌文档的url +你在WebView中的url)只是显示你由谷歌文档转换的图片。然而仍然没有简单的方法从url打开.pdf。