Android:使用MuPdf开源库阅读PDF文件
一时兴起
因为自己前段时间一直在做故事会的一个客户端,当然是非官方版,主要是由于自己的兴趣所致。以前就挺喜欢看故事会的,所以就希望做一个故事会的客户端,在手机上随时随地地看。因为故事会的官方APP的体验实在是太差了,而且资源还不全(而且还收费),所以我就打算自己做一个,然后去收集网上的资源。因为网上的故事会是以PDF文件的形式出现的,刚开始我想调用手机上的软件例如WPS等来阅读,后来一想反正做那就做PDF文件阅读功能吧,反正也没做过,正好试试呗。
一波三折
说做就做,刚开始使用的开源库是PDFView,就结果来说,软件体积太大了,而且使用的时候加载有点慢了,所以当时就不是太想使用这个库。后来没办法妥协呗,想了一个折中的办法,在开始的时候,利用PDFView提供的方法将PDF文件转换成一张张的图片保存到手机里,等加载的时候直接使用Picasso等加载图片的库来加载本地图片,这样总体来说还是不错的,直接加载图片比直接解析PDF文件要快很多,所以就出现了第一个版本,有兴趣的可以下载看一看。
后来,又随便在网上搜了搜,又找到一个不错的开源库,也就是MuPdf,这个和PDFView相比体积小,只有原来的一半,这已经是一个很大的诱惑了,没什么比体积小更让人扛不住的了。然后就开始找一些实现代码,最后找到了一个Eclipse版本的,它的阅读方式是横屏滑动阅读,我更喜欢竖屏阅读,所以就改成用ListView来显示,而且重要的是可以直接去显示,而不需要生成图片在手机里(因为这个做了实现封装),所以我就改了改,然后使用LruCache来保证不会出现内存溢出的情况,Demo运行还是不错的。
因为我的那个故事会客户端是使用AndroidStudio开发的,所以必须把MuPdf移植到AndroidStudio上。因为MuPdf需要调用so文件,所以我就先做了一个Demo,看看能不能运行出来,结果没问题再移植,然后悲催就开始了!!
本来so接触的就不多(其实很少%>_<%),所以怎么导入就是一个大问题,去网上搜有的说是建立jniLibs文件夹,然后放在里面,然而并无卵用;还有的说将so文件压缩成jar文件,然后放在libs里面,同样无卵用,最后真是要崩溃了。折腾了一下午,出去吃个晚饭,路上又搜了一种解决方法,告诉自己回去再试最后一次,不行我就放弃了,吃完饭回来试一下居然可以了,终于不在停止运行了。
问题出在哪我想暂时是找不到了,大概就是因为运行是没有正确的加载so文件,所以一些底层方法不能调用而崩溃了。
解决方法
task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs"){destinationDir file("$projectDir/libs")baseName "Native_Libs2"extension "jar"from fileTree(dir: "libs", include: "**/*.so")into "lib"}tasks.withType(JavaCompile){compileTask -> compileTask.dependsOn(nativeLibsToJar)}
将这一段代码加在build.gradle里,同时将libmupdf.so文件放在如下位置:
图中的Native_Libs2.jar是编译之后出现的,如果编译之后没有出现这个文件,那么可能就不会运行成功了。
哦,对了还要注意的是MuPdf的那些类的包名必须是com.artifex.mupdf,如下:
不然好像也不能运行成功。
柳暗花明
因为在AndroidStudio上可以运行成功了,所以我就打算将原来的客户端重新改写一下,将PdfViewer替换成MuPdf,一来可以减小APK的体积,二来也不用将PDF文件转换成图片来显示,很方便,等完成之后再将软件上传上来让有兴趣的看看。
下载
MuPdf的Demo-Eclipse版
MuPdf的Demo-AndroidStudio版
故事会客户端-PDFView版
故事会客户端-MuPdf版
附:经朋友测试,发现如果打开的PDF文件如果是损坏的话,那么应用就直接崩溃了,其次如果快速的关闭和打开应用,那么应用也会崩溃。这里我上传一份解决上述问题的版本(AndroidStudio版),它解决了上述问题,其实也就是换了一个so库,不过确实不会崩溃就是了。还需要注意的是新版的加载so库的方法和旧版不一样,大家在build.gradle中可以看到。
新版下载
因为我现在提供的so库只有armeabi-v7a版本的,像是x86,armeabi等架构下的都没有,在其他的手机上都出现了不能运行的问题。所以痛定思痛,我决定学习一下源码编译,得到其他架构下的so文件,还好不是太难,主要就是配置一下环境,具体内容可以参见我的这篇博客《Android:ubuntu下编译MuPDF源码》。
Android:使用MuPdf开源库阅读PDF文件相关推荐
- Android MuPDF 阅读PDF文件
MuPDF是一款轻量级的开源软件,可以用来阅读PDF文件.下载完源代码以后,想要运行成功,除了Android SDK之外,还需要Android NDK环境,因此有点麻烦. 但是一旦安装完必须的环境以后 ...
- 基于MuPDF库实现PDF文件转换成PNG格式图片
背景 之所以会接触MuPDF是因为,有位群友在Q群里提问,如何将PDF保存为.PNG图片格式.我一看到这个问题,就蒙了,因为我没有接触过类似的项目或程序.但是,作为一群之主的我,还是要给初学者一个答复 ...
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 项目中配置 OpenSSL 开源库 | 使用 OpenSSL 开源库解密 dex 文件 )
文章目录 一.项目中配置 OpenSSL 开源库 二.OpenSSL 开源库解密参考代码 三.解密 dex 文件的 Java 代码 四.解密 dex 文件的 Jni 代码 参考博客 : [Androi ...
- android 手机 用短信发pdf文件,安卓手机什么pdf阅读器最好用?如何编辑pdf文件
原标题:安卓手机什么pdf阅读器最好用?如何编辑pdf文件 现在手机上都会安装各种功能的应用app,以便应对工作或休闲娱乐的需求.那么你知道安卓手机上扫描pdf阅读器最好用吗?我认为一款好用的pdf阅 ...
- 转:在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档
在 C# 中使用 P/Invoke 调用 Mupdf 函数库显示 PDF 文档 一直以来,我都想为 PDF 补丁丁添加一个 PDF 渲染引擎.可是,目前并没有可以在 .NET 框架上运行的免费 PDF ...
- Android 优秀的开源库
前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 TextView HTextView 一 ...
- 使用iText库创建PDF文件
前言 译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/ 对于excel文件的读 ...
- Android常用热门开源库汇总(持续更新)
原文转载:https://www.yundashi168.com/344.html 请及时关注原文网站,因为后续持续更新都在原网站更新.请多多点赞和关注. 前言 收集了一些比较常见的开源库,特此记录( ...
- 手机端 阅读 pdf 文件 touchPDF.js
touchpdf 中文API 下载地址: http://github.com/loicminghetti/touchpdf/archive/master.zip 一款在手机端 阅读pdf 文件的 js ...
最新文章
- Stock Market(luogu 2938)
- 区块链101:区块链的应用和用例是什么?
- “Lephone.Data.DbEntry”的类型初始值设定项引发异常。(DbEntry.net3.9)
- ApacheCN Vue 译文集 20211115 更新
- 资源丨用PyTorch实现Mask R-CNN
- js刷新页面有哪几种方法
- 5 Ways to Speed Up Your Rails App
- 机器学习and深度学习学习资料
- sublime能编译PHP吗,让sublime编译php、js
- vmware 12 可用 序列号
- MAC和IP地址伪造发包
- CentOS7/rhel7 T440P 控制散热风扇转速等级
- 2020年ubuntu安装QQ和微信和迅雷的正确姿势
- 不仅仅生成图片,用GAN做无监督的异常检测
- Kerberos鉴权后Spark程序连接Redis数据库,解决No Reachable node in cluster错误
- 棋盘游戏 五子棋(1.人人对战)
- 写脚本的作用是什么?做自媒体,什么样的视频一定要写脚本?
- BeanUtils.copyProperties 无法转换数据类型不同的数据
- 采购交期改善,这些表格一定要用上
- 风云编程python基础语法(5)