前段时间项目涉及到pdf阅读,因此我开始找了些源码阅读比较,现在贴出各实现方案的对比。希望对大家有帮助。方便大家的阅读,我将自己认为最好的排在最前。
Google code:http://code.google.com/p/vudroid/
这是一款可以阅读pdf和djvu格式文本的阅读器。按道理说我使用这个给自己带来一定的麻烦,因为我自己需要剥离pdf部分,因为作者底层用的ndk开发,我还得重新编译so库。但是,在我找到的所有源代码中,此作品是最顺畅的,我不能割舍。如果大家想要快速使用而不想剥离pdf部分,可以使用我的google code:http://code-ernest.googlecode.com/svn/trunk/DocumentViewer
Google code: http://code.google.com/p/droidreader/
其采用native library和Vudroid一样:MuPDF
但是它的缺点是,实现上比Vudroid少了那么点顺畅性,在zoom这一点上要输Vudroid,其他方面都很棒。
Google code:http://code.google.com/p/apv/
其采用native library和Vudroid一样:MuPDF
理论上来说应该和Vudroid不太差,它的问题是刷新比Vudroid要慢那么一点,没有多点触控。但是,有一点必须说的是:Vudroid读取文本格式的超强,我给过20M的文字版的pdf测试过,vudroid都能顺畅阅读,Vudroid读取扫描版的或者里面有图片的要差一点,速度稍慢;而apv读取扫描版的则顺畅一点,50M的扫描版也没有问题,但是,20M的文字版pdf它不能读,我没有深究什么原因,大家有兴趣的可以发现下,望指教:ernest.he2009@gmail.com
Google code: http://code.google.com/p/apdfviewer/
代码最少,整页加载模式中最快的一款,当然,快,就意味着有可能是ndk开发,不错它就是ndk的产物,有兴趣的可以使用。注意:大文件读取有点慢,我以为它死了。这一点上最好的是Vudroid。
另外还有一款是基于Sun的pdf解析库的,纯java,唯一一款纯java的。但是,它的致命之处是,他读不了大文件。Oh no。可以从eoeAndroid论坛获取。
还有许多你可以从Google code上获取到许多类似的。如果你有更好的发现,联系我:ernest.he2009@gmail.com
引用来自“穿裤衩闯天下”的评论
楼主,我使用你的google code 当读取10M大小的pdf时会出错,直接强制退出,不论是扫描版还是文字版,都不行!?不过也没有报内存溢出错误:FATAL EXCEPTION: main
java.lang.RuntimeException: error loading page
at org.vudroid.pdfdroid.codec.PdfPage.open(Native Method)
at org.vudroid.pdfdroid.codec.PdfPage.createPage(PdfPage.java:55)
at org.vudroid.pdfdroid.codec.PdfDocument.getPage(PdfDocument.java:18)
at org.vudroid.document.DecodeServiceBase.getPage(DecodeServiceBase.java:158)
at org.vudroid.document.DecodeServiceBase.getEffectivePagesWidth(DecodeServiceBase.java:181)
at org.vudroid.document.DocumentView.init(DocumentView.java:68)
at org.vudroid.document.DocumentView.access$2(DocumentView.java:64)
at org.vudroid.document.DocumentView$3.run(DocumentView.java:120)
at android.os.Handler.handleCallback(Handler.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
FATAL EXCEPTION: main
java.lang.RuntimeException: error loading page
at org.vudroid.pdfdroid.codec.PdfPage.open(Native Method)
at org.vudroid.pdfdroid.codec.PdfPage.createPage(PdfPage.java:55)
at org.vudroid.pdfdroid.codec.PdfDocument.getPage(PdfDocument.java:18)
at org.vudroid.document.DecodeServiceBase.getPage(DecodeServiceBase.java:158)
at org.vudroid.document.DecodeServiceBase.getEffectivePagesWidth(DecodeServiceBase.java:181)
at org.vudroid.document.DocumentView.init(DocumentView.java:68)
at org.vudroid.document.DocumentView.access$2(DocumentView.java:64)
at org.vudroid.document.DocumentView$3.run(DocumentView.java:120)
at android.os.Handler.handleCallback(Handler.java)
at android.os.Handler.dispatchMessage(Handler.java)
at android.os.Looper.loop(Looper.java)
at android.app.ActivityThread.main(ActivityThread.java)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
at dalvik.system.NativeStart.main(Native Method)
引用来自“android菜鸟_F”的评论
引用来自“正仔”的评论
mark一下,正需要解析pdf文档!
引用来自“正仔”的评论
mark一下,正需要解析pdf文档!
引用来自“lianwanfei”的评论
我这边用的时候要10秒多才能显示一页,请问你那边多快的?是不是我哪里错了?