之前寫過一篇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'
- 1
- 1
2.2 一句代碼就可以加載網絡pdf。
pdfView.fileFromLocalStorage(this,this,this,fileUrl,fileName); //設置pdf文件地址
- 1
- 1
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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- OnPageChangeListener onPageChangeListener :翻頁回調
- OnLoadCompleteListener onLoadCompleteListener:加載完成的回調
- OnDrawListener:頁面繪製的回調
- String fileUrl : 文件的網絡地址
- 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>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
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("http://file.chmsp.com.cn/colligate/file/00100000224821.pdf", "00100000224821.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();
}
- 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
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 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
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
代碼地址
效果實現:
代碼已經奉上,請大傢伙給點建議。一起交流(1561281670)