# PDFReader **Repository Path**: ngb5995/PDFReader ## Basic Information - **Project Name**: PDFReader - **Description**: PDF阅读器 - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2017-10-11 - **Last Updated**: 2023-07-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PDFReader PDF阅读器 请用真机测试,模拟器显示有问题,部分pdf文件不能正常加载。 1.请用android studio,打开项目即可。支持最低版本是5.0,最低sdk为21版本;使用版本为7.0,使用sdk版本是25。gradle版本为25.0.2。 项目包含两个module: add:应用层,app的build.gradle中需要添加依赖:compile project(path: ':plugpdf') plugpdf:SDK 2.配置PDF文件路径:在SD卡或设备存储的Download目录下(根目录的Download,如果不存在请创建该目录),放置一个文件名为sample.pdf的可读文件。 3.实现步骤: 1):使用plugPDF SDK,介绍以及下载地址:https://plugpdf.com/ 2):MainActivity为程序入口,需要配置SDK的key,下载SDK后在application中有KEY字符串,拷贝到项目中即可: PlugPDF.init(getApplicationContext(), "D9B22DA93HF9GH59ED34BC3F6C227AG878DGE239E478B49B8CH7FBF5"); 如果key错误,会抛出该异常: E/PlugPDF: Invalid license exception com.epapyrus.plugpdf.core.PlugPDFException$InvalidLicense 3):加载pdf文件:MainActivity.openDefaultPDF() 创建SimpleDocumentReader对象,设置listener,调用openFile()方法,传入String类型的文件路径即可,也可设置文件的显示方式 BasePlugPDFDisplay.PageDisplayMode.VERTICAL为纵向显示,其他方式自行查看该枚举类。 4.SDK主要方法介绍 SimpleDocumentReader类是加载PDF的基类,实现ReaderListener接口。 ReaderListener接口的主要方法有: onLoadFinish():加载PDF文件完成时调用; onSearchFinish():执行搜索结束后调用; onGoToPage():跳转至指定页面 onSingleTapUp():点击PDF正文触发的事件; onLongPress():PDF正文页面长按事件; onDoubleTapUp():PDF正文页面双击事件; onScroll():页面滑动监听事件; onChangeDisplayMode():修改页面显示方式(垂直显示、横向显示、缩略图等) onChangeZoom():缩放级别监听事件。 在SimpleDocumentReader类中,用于显示PDF的是ReaderView. ReaderView是PDF显示的主View,其中每一张PDF又是一个PageView。ReaderView继承自ViewGroup,实现BaseReaderControl接口,BaseReaderControl接口是对PDF操作的控制器。 SimpleDocumentReader中的getAllThumbbail()放方法用来获取文件缩略图。左侧列表的缩略图就是通过该方法获取。 onLoadFinish():PDF文件解析成功之后调用该方法创建布局。 setDoubleTapZoomLevel():控制双击屏幕后,PDF的缩放级别。 以下列举ReaderView中用到的主要对象和方法: PDFDocument对象:解析PDF文件; getDocument();返回文档对象 search():执行搜索操作。搜索时new一个新线程,将全部搜索结果存在SearchInfo中,结果包含:当前页数,关键字,结果坐标数组,文件路径。 goToPage():调用底层BasePlugPDFDisplay类中的goToPage()方法,跳转至指定页面; getPageCount():获取PDF总页数 openFile():打开文件,该方法需要两个参数,第一个是文件路径,第二个是PDF文件密码,如果密码为为空传null; openUrl():根据url打开网络文件; SimpleReaderControlView是左侧弹出缩略图部分的布局创建, 在在SimpleDocumentReader.onLoadFinish()方法中调用 SimpleReaderControlView中有个onSearchFinish()方法,该方法是在搜索执行结束时调用的,该方法中绘制了搜索结束后,关键字的整行整列高亮显示。 5.遇到的问题及难点 1):由于Android原生系统没有PDF解析及其他实现方法,目前开源的框架在GitHub上有PdfView,下载地址:https://github.com/JoanZapata/android-pdfview 但是该项目只有加载PDF显示,SDK中不支持搜索,因为时间有限,所以看到一半果断放弃。。。后来找到其他第三方SDK,都是付费使用,汗(lll¬ω¬) 2):在目前的SDK中有缩略图生成的类,叫ThumbnailPageView,在plugpdf的lib中的com.epapyrus.plugpdf.core.viewer目录下,可以抽空看看,但是在左侧列表中显示 时,仿照原来的GridView,自己实现一个ListView,并不能生成缩略图,后来采用PDFDocument.drawPage()方法生成缩略图存在集合中,创建SimpleReaderControlView 时传值过去,实现缩略图列表加载。 3):搜索后,关键字整行整列高亮显示。由于旧版的PlugPDF SDK不支持修改关键字背景的矩形框,尝试与PlugPDF公司的技术支持取得联系,在他的帮助下,重新修改了SDK中的 绘制方法,给了我一份temp版本,才有了后来的在onSearchFinish()方法中修改矩形框的位置。 6.存在的问题 1):修改了版本之后模拟器不能运行,可能是SDK的原因,真机可以正常运行,这个问题已经跟PlugPDF公司的技术支持反映,具体结果我也不得而知了。 2):偶尔第一次加载有点慢,但是打开之后还是操作还是很流畅,不会有卡顿,如果点击打开文件没反应,可多点几次试试。 3):左侧的当前页的缩略图位于绿色框中,还没做适配,这个问题会尽快完善。