之前写过一篇android打开本地pdf文件的文章,最后总结的时候说,后面一定要拓展库,让其也能打开网络的的pdf文件。今天终于可以兑现承诺了。frok一份代码https://github.com/joanzapata/android-pdfview,源码地址:,开始改造一番。
1.基本思路:
打开网络pdf 思路整体还是来源与图片的加载。
android中加载网络图片的框架有很多个。如image-laoder, fresco、glide等,首先都是从内存中找图片,如果内存中没有,接着从本地找,本地没有在从网络下载。
android中加载pdf也是类似,首先从本地找pdf文件,如果本地存在该pdf文件,直接打开,如果本地不存在,将该pdf文件下载到本地在打开。
下载文件用到了retrofit2的库,已经封装到android_pdf中了。
2.依赖android_pdf库方法
2.1 在项目的gradle中增加如下代码:
compile 'com.lidong.pdf:android_pdf:1.0.1'
2.2 一句代码就可以加载网络pdf。
pdfview.filefromlocalstorage(this,this,this,fileurl,filename); //设置pdf文件地址
2.3对filefromlocalstorage(this,this,this,fileurl,filename)的解析
/** * 加载pdf文件 * @param onpagechangelistener * @param onloadcompletelistener * @param ondrawlistener * @param fileurl * @param filename */ public void filefromlocalstorage( final onpagechangelistener onpagechangelistener, final onloadcompletelistener onloadcompletelistener, final ondrawlistener ondrawlistener, string fileurl, final string filename)
3.使用android_pdf库方法
3.1写一个布局文件
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.lidong.pdf.androidpdf.mainactivity"> <com.lidong.pdf.pdfview android:id="@+id/pdfview" android:layout_width="match_parent" android:layout_height="match_parent" /> </relativelayout>
3.2在mainactivity中加载
import android.graphics.canvas; import android.os.environment; import android.support.v7.app.appcompatactivity; import android.os.bundle; import android.util.log; import android.widget.toast; import com.lidong.pdf.pdfview; import com.lidong.pdf.api.apimanager; import com.lidong.pdf.listener.ondrawlistener; import com.lidong.pdf.listener.onloadcompletelistener; import com.lidong.pdf.listener.onpagechangelistener; import com.lidong.pdf.util.fileutils; import java.io.file; import java.io.fileoutputstream; import java.io.ioexception; import java.io.inputstream; import okhttp3.responsebody; import rx.android.schedulers.androidschedulers; import rx.functions.action1; import rx.schedulers.schedulers; public class mainactivity extends appcompatactivity implements onpagechangelistener ,onloadcompletelistener, ondrawlistener { private pdfview pdfview ; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); pdfview = (pdfview) findviewbyid( r.id.pdfview ); displayfromfile1("填写所要打开的pdf地址"); } /** * 获取打开网络的pdf文件 * @param fileurl * @param filename */ private void displayfromfile1( string fileurl ,string filename) { showprogress(); pdfview.filefromlocalstorage(this,this,this,fileurl,filename); //设置pdf文件地址 } /** * 翻页回调 * @param page * @param pagecount */ @override public void onpagechanged(int page, int pagecount) { toast.maketext( mainactivity.this , "page= " + page + " pagecount= " + pagecount , toast.length_short).show(); } /** * 加载完成回调 * @param nbpages 总共的页数 */ @override public void loadcomplete(int nbpages) { toast.maketext( mainactivity.this , "加载完成" + nbpages , toast.length_short).show(); hideprogress(); } @override public void onlayerdrawn(canvas canvas, float pagewidth, float pageheight, int displayedpage) { // toast.maketext( mainactivity.this , "pagewidth= " + pagewidth + " // pageheight= " + pageheight + " displayedpage=" + displayedpage , toast.length_short).show(); } /** * 显示对话框 */ private void showprogress(){ loadinguihelper.showdialogforloading(this,"报告加载中,请等待。。。",false); } /** * 关闭等待框 */ private void hideprogress(){ loadinguihelper.hidedialogforloading(); }
效果实现:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持移动技术网!
如对本文有疑问, 点击进行留言回复!!
Xamarin 安卓 相机 各种坑 目标API Android 6以后,我选的目标API版本是 Android 10
Android 9.0+软件某些功能突然暴毙:cleartext not permitted
Android : Resource is not a Drawable (color or path)
Flutter问题集锦——Android Studio 4.0.1 在AVD Manger中启动模拟器报“unable to locate abd”
网友评论