Android开发之pdf

Android手机里面读取显示pdf文件,如果只是简单的开发只需要参考官方提供的simple PdfRendererBasic demo即可。如果你还想支持手势、动画和缩放等高级功能,那么需要用到开源库,网上不错开源的库倒是有几个,稍后再来对比抉择,先来了官方simple PdfRendererBasic,先上效果图

pdf开发三部曲

  • 打开初始化Pdf读取器PdfRenderer

如果你是在Fragment里面使用,最好在onAttach方法初始化

    /*** Sets up a {@link android.graphics.pdf.PdfRenderer} and related resources.*/private void openRenderer(Context context) throws IOException {// In this sample, we read a PDF from the assets directory.mFileDescriptor = context.getAssets().openFd("sample.pdf").getParcelFileDescriptor();// This is the PdfRenderer we use to render the PDF.mPdfRenderer = new PdfRenderer(mFileDescriptor);}
  • 读取内容

传入指定页码,读取内容转换成bitmap图片设置到ImageView

   private void showPage(int index) {if (mPdfRenderer.getPageCount() <= index) {return;}// Make sure to close the current page before opening another one.if (null != mCurrentPage) {mCurrentPage.close();}// Use `openPage` to open a specific page in PDF.mCurrentPage = mPdfRenderer.openPage(index);// Important: the destination bitmap must be ARGB (not RGB).Bitmap bitmap = Bitmap.createBitmap(mCurrentPage.getWidth(), mCurrentPage.getHeight(),Bitmap.Config.ARGB_8888);// Here, we render the page onto the Bitmap.// To render a portion of the page, use the second and third parameter. Pass nulls to get// the default result.// Pass either RENDER_MODE_FOR_DISPLAY or RENDER_MODE_FOR_PRINT for the last parameter.mCurrentPage.render(bitmap, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);// We are ready to show the Bitmap to user.mImageView.setImageBitmap(bitmap);updateUi();}
  • 关闭Pdf读取器PdfRenderer

PdfRenderer.Page提供了几个方法方便与我们使用,例如getIndex(获取当前页码)、getPageCount(总页码)等。在我们离开pdf展示页面时需要对资源进行释放,关闭Pdf读取器(fragment在生命周期onDetach调用释放关闭),如果你想做的像小说阅读一样,可以记录当前的index方便下次进入直接跳转到指定位置,书签就这个原理

  private void closeRenderer() throws IOException {if (null != mCurrentPage) {mCurrentPage.close();}mPdfRenderer.close();mFileDescriptor.close();}

如果你需要这个simple可以选择官网simple下面下载,如果你不能访问可以选择github上面下载:https://github.com/googlesamples/android-PdfRendererBasic,当然这个simple功能简单并不完善,仅仅实现了pdf简单展示,跟为高级功能我们接着往下看。

github上寻寻觅觅,最终锁定了两个目标

1.PdfViewPager

首先添加项目依赖

compile 'es.voghdev.pdfviewpager:library:0.2.1'

读写网络权限肯定需要的(本地pdf不需要网络),如果是网络pdf文件需要通过RemotePDFViewPager现在远程文件,DownloadFile.Listener回调下载结果,下载成功了需要为RemotePDFViewPager绑定适配器PDFPagerAdapter,在Activity销毁时需要释放PDFPagerAdapter

public class RemotePDFActivity extends AppCompatActivity implements DownloadFile.Listener {public void initPdfView(){RemotePDFViewPager remotePDFViewPager =new RemotePDFViewPager(context, "http://partners.adobe.com/public/developer/en/xml/AdobeXMLFormsSamples.pdf", this);}@Overridepublic void onSuccess(String url, String destinationPath) {// That's the positive case. PDF Download went fineadapter = new PDFPagerAdapter(this, "AdobeXMLFormsSamples.pdf");remotePDFViewPager.setAdapter(adapter);setContentView(remotePDFViewPager);}@Overridepublic void onFailure(Exception e) {// This will be called if download fails}@Overridepublic void onProgressUpdate(int progress, int total) {// You will get download progress here// Always on UI Thread so feel free to update your views here}@Overrideprotected void onDestroy() {super.onDestroy();adapter.close();}
}

根据github上面资料介绍,该库支持网络pdf、assets文件下的pdf、SDcard缓存的pdf文件,看上去挺不错的,但是,但是,但是尼玛还是有版本要求(没性趣再看下去了)

2.android-pdfview

这个库才是我的最爱!!同样支持多种方式加载pdf,向下兼容到API8,Configurator提供了builder的方式配置属性,让代码更简洁了,使用时Gradle依赖

compile 'com.joanzapata.pdfview:android-pdfview:1.0.4@aar'

xml布局

<com.joanzapata.pdfview.PDFViewandroid:id="@+id/pdfview"android:layout_width="match_parent"android:layout_height="match_parent"/>

代码调用实例

pdfView.fromAsset(pdfName).pages(0, 2, 1, 3, 3, 3).defaultPage(1).showMinimap(false).enableSwipe(true).onDraw(onDrawListener).onLoad(onLoadCompleteListener).onPageChange(onPageChangeListener).load();

pages和onDraw是可选项,pages:它可以让你过滤和你需要的PDF页面顺序,onDraw:允许您在当前页面画布上画上一个的东西


上面这个库基本能满足我们开发所需了,然而实际项目开发中还会遇到各种问题,待以后项目中用到再来不全,这里只做一个简单纪录吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55214.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Android的本地电子书阅读器的设计与实现Ebook(3)

之前写这个只是抱着半玩的心态&#xff0c;没有想到有这么多网友愿意驻足浏览&#xff0c;十分的惊喜。这里浅浅说一下我并不是专门学软件开发的&#xff0c;所以如果有什么错误请多指教。 接上回分解。现在我们来到第二个界面“感悟”&#xff1a; fragment_login2.xml&#x…

电子书《Head First Android 开发》百度网盘链接

电子书《Head First Android 开发》&#xff0c;很不错的一本学习安卓的书&#xff0c;需要的可以使用百度网盘 链接&#xff1a;https://pan.baidu.com/s/1bYR0fKK2c0qU-T45Hg6nDQ 提取码&#xff1a;c6pn 目录&#xff1a;

基于Android的本地电子书阅读器的设计与实现Ebook(终章)

昨天写到最后实在是卡的受不了了&#xff0c;今天把这个写完。 最后就是补充几个xml&#xff0c;不知道前面有没有放&#xff0c;在这里补充下。 应该有五个是遗漏的&#xff1a; 我在这里按照顺序依次给出代码&#xff0c;就不标名字了 <?xml version"1.0" enc…

安卓电子书格式_不用电脑,6招教你把手机上的电子书传输到Kindle上

点击 上方蓝字 查看你有多少朋友在悄悄关注 本文共 15 68 字 预计阅读时间: 2 分钟 相信每位Kindler都会有这样的生活场景——出门在外,不易携带电脑,手头上只能带轻量级的设备,比如带一部可以上网的手机,一台Kindle。 在这种场景下,如果Kindle上没有想看的书,而手机上却…

基于安卓的电子书阅读器

功能描述&#xff1a; 1&#xff1a;用户在使用软件前需要先对软件进行注册&#xff0c;注册完成后通过账号和密码登录成功后&#xff0c;才可以对软件进行使用 2&#xff1a;用户登录成功后可以查看最新书籍信息&#xff0c;以及数据的分类&#xff0c;排行等信息&#xff0c;…

epub文件是什么文件?如何用安卓手机打开?

大家在查找资料时&#xff0c;越来越多的遇见epub格式了。其实EPUB是一种电子文档格式&#xff0c; 如同word txt pdf一样可以承载很多文字信息。但在这种格式中&#xff0c;使用了不同的开放标准。区别在于&#xff0c;EPub文件属于一种可以“自动重新编排”的文件&#xff1b…

安卓手机电子书阅读器的使用体验及对比

写在前面 由于一些原因, 我一直使用安卓手机, 在安卓上查看PDF, 我经历了几个不同的阶段, 但是体验多多少少会有一些不好, 直到最近, 我才在一篇博客中找到了一款软件, 名为readera, 可以说完美解决了之前各种软件中的一些缺点与不足了. 下面从我的各个阶段使用 的PDF阅读器开…

安卓手机上最好的3个mobi阅读器

如epub、azw3一样&#xff0c;mobi也是一种常见的电子书格式&#xff0c;它可以用亚马逊电子设备打开阅读&#xff0c;但是在手机上应该怎么打开呢&#xff1f;其实通过一些支持mobi格式的阅读器就可以打开。今天小编就为大家推荐3个在安卓手机上可用的mobi阅读器。 第一款&am…

下载了免费的txt电子书,如何用安卓手机打开?

小编在通勤的时候&#xff0c;经常会看到身边的人在拿着手机看小说&#xff0c;看来喜欢使用手机阅读的人真的越来越多了。今天小编就为大家推荐几款良心的安卓手机TXT阅读器&#xff0c;使用这些阅读器&#xff0c;读TXT电子书的体验更好哦&#xff01;一起来看看吧&#xff0…

mobi怎么在Android手机上打开?

mobi格式之所以流行主要是源于亚马逊官网的电子书格式以及Kindle&#xff0c;mobi格式的文件无法直接用阅读器打开&#xff0c;而我们在日常生活中经常用手机打开文件阅读。今天小编就向大家分享mobi怎么在Android手机上打开&#xff1f; mobi文件转码为epub文件 首先&#xf…

epub电子书如何用安卓手机打开?

现在网络上有很多epub格式的小说资源&#xff0c;但很多手机由于自身不能直接打开epub格式文件&#xff0c;或者阅读软件使用感较差&#xff0c;会我们的阅读带来不小的困扰。今天我就为大家介绍3款可以在安卓手机上打开epub的小说阅读器。 第一款&#xff1a;Neat Reader 这…

azw3电子书如何用安卓手机打开?

现在网络上有很多azw3格式的小说资源&#xff0c;但这个格式是适配亚马逊kindle的&#xff0c;很多手机由于自身不能直接打开azw3格式文件&#xff0c;会我们的阅读带来不小的困扰。今天我就为大家介绍3款可以在安卓手机上打开azw3的小说阅读器。 第一款&#xff1a;Neat Read…

txt电子书如何用安卓手机完美打开?

在手机上看小说&#xff0c;好的阅读器可以使阅读体验锦上添花。下面为大家推荐几款安卓手机上的txt阅读器&#xff0c;供大家尝试。 第一款&#xff1a;Neat Reader 这款阅读器界面设计相当整洁&#xff0c;色调以淡蓝色和白色为主&#xff0c;整体阅读视觉感舒适&#xff0c…

验证码过期(小功能)

作用&#xff1a;模拟获取验证码&#xff0c;10s后&#xff0c;重新获取。未过期前不可重复获取&#xff1b; <% page language"java" import"java.util.*" pageEncoding"utf-8"%> <% String path request.getContextPath(); String b…

马斯克血洗推特!传机器学习裁员90%,团队直接解散

【导读】马氏推特裁员迎来大结局&#xff01;员工互相告别&#xff0c;「血色星期五」来了。 周五&#xff0c;推特大裁员正式开始&#xff01; 据称已经有3700多名员工卷铺盖走人了。按照推特7500人左右的员工数量来看&#xff0c;看起来猜50%的人赌对了。 大家&#xff0c…

NC:恢复菌群多样性或能降低耐药性

文章目录 建筑环境中的人为微生物耐药性热心肠日报 摘要背景结果限制与微生物多样性减少相关附表1. 基于单个宏基因组样品blastx比对NCBI NR估计Alpha多样性图1. 宏基因组数据物种和功能香农多样性指数组间比较附图1. 16S物种香农多样性指数组间比较 环境差异与微生物组相关图2…

艾美捷抗人干扰素α单抗(MT1),灵敏且高特异性

IFN-α2 干扰素-α&#xff08;IFN-α&#xff0c;也称为IFN-α、IFN-α、IFNA和干扰素-α&#xff09;是一种I型干扰素。人类有 13 种 IFN-α 亚型&#xff1a;IFN-α 1、2、4、5、6、7、8、10、13、14、16、17 和 21。与其他亚型一样&#xff0c;干扰素-α2 (IFN- α2&#…

宏病毒组研究大放异彩!| 凌恩生物1-5月高分宏病毒组文章大盘点!

凌恩生物现已在宏组学、基因组、表观遗传以及蛋白代谢等多组学及联合分析领域积累了深厚经验&#xff0c;打造出成熟的科研服务平台&#xff0c;以优质售前方案和优秀售后服务助力客户在Nature、Science、PNAS、ISME和MIcrobiome等高端国际期刊上发表了大量文章。 伴随着组学技…

Nature-2018-抗菌药物组合有望特异性治疗耐多药性的细菌感染

本文由同济大学赵晗编译&#xff0c;宏基因组公众号编辑。 抗菌药物组合的物种特异活性 Species-specific activity of antibacterial drug combinations (Nature,IF: 41.577) 一、摘要 抗菌药物耐药性的传播已经成为一个日渐严重的公共健康问题&#xff0c;它使得曾经可…

生命早期肠道微生物组和疫苗功效

疫苗是公共卫生领域最伟大的成就之一&#xff0c;每年可预防数百万儿童疾病和死亡病例。然而&#xff0c;许多疫苗的功效在地理和社会经济不同地区的婴儿之间可能存在很大差异。 有研究发现&#xff0c;肠道微生物组组成的差异已成为解释免疫结果差异的主要因素之一。 在本篇文…