使用mozilla pdf.js在Android WebView中显示PDF文件Android API级别低于19

使用mozilla pdf.js在Android WebView中显示PDF文件Android API级别低于19,第1张

概述我在AndroidWebView中使用mozillapdf.js来显示PDF文件.代码在AndroidAPILevel19中运行良好.Uripath=Uri.parse(Environment.getExternalStorageDirectory().toString()+"est.pdf");webView.loadUrl("file:///android_asset/pdfviewer/index.html?file="+p

我在Android WebVIEw中使用mozilla pdf.js来显示pdf文件.

代码在AndroID API Level 19中运行良好.

Uri path = Uri.parse(Environment.getExternalStorageDirectory().toString() + "/test.pdf");webVIEw.loadUrl("file:///androID_asset/pdfvIEwer/index.HTML?file=" + path); 

但它不适用于AndroID API 16级及以下版本.

设备上显示白色空白屏幕.

有什么方法可以解决这个问题吗?

解决方法:

我遇到了同样的问题.首先,似乎从2013年12月开始使用旧版本的pdf.Js,如果不包括已编译的文件(pdf.Js和pdf.worker.Js),您可以单独包含所有Js文件,就像在helloworld示例中一样.

然后我发现了这个SO post.有人为AndroID安排了一个pdf.Js示例(Butelo).我试过了,项目的资产文件夹中的.Js文件甚至可以在AndroID 2.3上运行,但只有通过http才能访问.在帖子中还有关于如何使用file:// urls的建议.我找到了另一个解决方案:

您使用Java读取pdf文件并将其转换为Base64.这样你就可以绕过file://限制.

ByteArrayOutputStream ous = null;inputStream ios = null;String imageData = null;try {    byte[] buffer = new byte[4096];    ous = new ByteArrayOutputStream();    ios = new fileinputStream(pdffile);    int read = 0;    while ( (read = ios.read(buffer)) != -1 ) {        ous.write(buffer, 0, read);    }                                      imageData = Base64.encodetoString(ous.toByteArray(), Base64.DEFAulT).replace("\n", "").replace("\r", "");                                       } catch (Exception e) {    e.printstacktrace();}           

然后通过以某种方式将imageData传递给它来加载WebVIEw.使用JavaScript,您需要将Base64转换为UInt8数组.可能你可以直接在Java中完成这个并且避免使用Base64,但是我没弄清楚如何以及我不确定你如何将这个数组放入你的WebVIEw中.

function fromBase64(dataURI) {               var raw = window.atob(dataURI);    var rawLength = raw.length;    var array = new Uint8Array(new ArrayBuffer(rawLength));    for(i = 0; i < rawLength; i++) {         array[i] = raw.charCodeAt(i);    }    return array;}

pdf.Js将获取UInt8数组,如果它是一个URL.所以你可以使用:

pdfJs.getdocument(fromBase64(base64DataFromJava));

此方法适用于AndroID 4.0及更高版本.出于某些奇怪的原因,它目前在AndroID 2.3上不起作用,但这可能与我项目中的其他一些问题有关.当然,在较旧的设备上,渲染需要一些时间(有时是半分钟),但无论如何都是如此.

总结

以上是内存溢出为你收集整理的使用mozilla pdf.js在Android WebView中显示PDF文件Android API级别低于19全部内容,希望文章能够帮你解决使用mozilla pdf.js在Android WebView中显示PDF文件Android API级别低于19所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1100019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存