1. 程式人生 > >android 下載網路pdf檔案後並顯示

android 下載網路pdf檔案後並顯示

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)的解析

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/**

* 載入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. OnPageChangeListener onPageChangeListener :翻頁回撥
  2. OnLoadCompleteListener onLoadCompleteListener:載入完成的回撥
  3. OnDrawListener:頁面繪製的回撥
  4. String fileUrl : 檔案的網路地址
  5. String fileName 檔名稱

3.使用android_pdf庫方法

3.1寫一個佈局檔案

?

1

2

3

4

5

6

7

8

9

10

11

12

13

<?xml version="1.0" encoding="utf-8"?>

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中載入

?

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

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();

}