我在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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)