Android开发之pdf
来源:互联网 发布:python进阶书籍推荐 编辑:程序博客网 时间:2024/06/17 07:54
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); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 读取内容
传入指定页码,读取内容转换成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(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 关闭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(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
如果你需要这个simple可以选择官网simple下面下载,如果你不能访问可以选择github上面下载:https://github.com/googlesamples/android-PdfRendererBasic,当然这个simple功能简单并不完善,仅仅实现了pdf简单展示,跟为高级功能我们接着往下看。
github上寻寻觅觅,最终锁定了两个目标
1.PdfViewPager
首先添加项目依赖
compile 'es.voghdev.pdfviewpager:library:0.2.1'
- 1
- 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); } @Override public void onSuccess(String url, String destinationPath) { // That's the positive case. PDF Download went fine adapter = new PDFPagerAdapter(this, "AdobeXMLFormsSamples.pdf"); remotePDFViewPager.setAdapter(adapter); setContentView(remotePDFViewPager); } @Override public void onFailure(Exception e) { // This will be called if download fails } @Override public void onProgressUpdate(int progress, int total) { // You will get download progress here // Always on UI Thread so feel free to update your views here } @Override protected void onDestroy() { super.onDestroy(); adapter.close(); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
根据github上面资料介绍,该库支持网络pdf、assets文件下的pdf、SDcard缓存的pdf文件,看上去挺不错的,但是,但是,但是尼玛还是有版本要求(没性趣再看下去了)
2.android-pdfview
这个库才是我的最爱!!同样支持多种方式加载pdf,向下兼容到API8,Configurator提供了builder的方式配置属性,让代码更简洁了,使用时Gradle依赖
compile 'com.joanzapata.pdfview:android-pdfview:1.0.4@aar'
- 1
- 1
xml布局
<com.joanzapata.pdfview.PDFView android:id="@+id/pdfview" android:layout_width="match_parent" android:layout_height="match_parent"/>
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
代码调用实例
pdfView.fromAsset(pdfName) .pages(0, 2, 1, 3, 3, 3) .defaultPage(1) .showMinimap(false) .enableSwipe(true) .onDraw(onDrawListener) .onLoad(onLoadCompleteListener) .onPageChange(onPageChangeListener) .load();
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
pages和onDraw是可选项,pages:它可以让你过滤和你需要的PDF页面顺序,onDraw:允许您在当前页面画布上画上一个的东西
上面这个库基本能满足我们开发所需了,然而实际项目开发中还会遇到各种问题,待以后项目中用到再来不全,这里只做一个简单纪录吧
转自:http://blog.csdn.net/analyzesystem/article/details/51314323
- Android开发之pdf
- Android开发之pdf
- Android 开发之多种方案PDF阅读
- Android PDF开发资料
- android pdf阅读开发
- android PDF 开发笔记
- Android 之 PDF 预览
- Android PDF开发:android-pdfview
- Android PDF开发:android-pdfview
- Android PDF开发:android-pdfview
- android pdf 阅读器开发, pdf demo, pdf第三方控件
- Android开发:显示PDF文件
- Android开发书籍pdf汇总
- 【android开发】手写签名系统的设计与实现之实现解析pdf文件(二)
- 【android开发】手写签名系统的设计与实现之实现解析pdf文件(二)
- iOS开发之Quartz2D生成PDF-Part1
- iOS开发之Quartz2D生成PDF-Part2
- 开源 Android pdf 阅读器开发总结
- Android Fragment的使用 二 事务函数详解
- Java继承-子类默认在构造函数中用super()调用父类构造函数
- mybatis异常invalid comparison: java.util.Date and java.lang.String
- linux之ps命令--进程快照
- 容器生态系统 (续)
- Android开发之pdf
- Mysql数据库常用命令
- 算法导论(Exercise 2-4)
- (Paper)Network in Network网络分析
- HDU 1004 Let the Balloon Rise
- Ubuntu16.04下,通过pyenv安装anaconda,并安装tensorflow-gpu和opencv等库的简单方法
- MySQL 开发篇——2
- Java反射机制
- 553. Optimal Division(Medium)