国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 如何本地加載pdf文件

2019-10-23 18:30:08
字體:
來源:轉載
供稿:網友

大部分app打開pdf文件是通過intent調起手機中能打開pdf文件的工具,來查看pdf文件,如果需求是,用戶在app內下載好pdf文件后,不通過第三方的工具,本地打開。

這樣的需求要怎么實現呢?上網查了一些資料,發現了一個很好用PDF開源庫。

使用起來也很簡單,首先添加PDFView的引用

compile 'com.github.barteksc:android-pdf-viewer:2.4.0'

布局中引用PdfView

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/common_title" /> <com.github.barteksc.pdfviewer.PDFView  android:id="@+id/pdf_view"  android:layout_width="match_parent"  android:layout_height="match_parent" /></LinearLayout>

接下來就是下載pdf文件,為了節省用戶資源,在每次下載之前檢查一下本地是否有該pdf文件,如果有直接打開,沒有的話再去下載。

這里我寫了一個加載中的對話框,打開過程中和下載過程中用的都是這一個

if (CheckFileExist(title)){   builderShow = new CustomDialog(ShowPDFActivity.this);   LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);   View view = inflater.inflate(R.layout.dialog_pdf_progress_new, null);   builderShow.setContentView(view);   builderShow.show();   isDownload=false;   refushUI();  }else {   isDownload=true;   DownLoadPDF.getInstance().downLoadPDF(ShowPDFActivity.this, //下載路徑);  }

如果本地有pdf文件,則開始加載pdf文件,refushUI();

public void refushUI(){  try {   pdfView.fromFile(new File(//pdf文件的絕對路徑,//標題))     .defaultPage(1)     .enableAnnotationRendering(false)     .onLoad(new OnLoadCompleteListener() {      @Override      public void loadComplete(int nbPages) {       if (isDownload){        DownLoadPDF.getInstance().closeDilaoig();       }       if (builderShow != null&&builderShow.isShowing()) {        builderShow.dismiss();       }      }     })     .scrollHandle(null)     .load();  }catch (Exception e){   e.printStackTrace();  } }

PDFView加載pdf文件有兩種形式,一種是從文件中讀取,還有一種就是從assets目錄中讀取

private void displayFromAssets(String assetFileName ) {  pdfView.fromAsset(assetFileName) //設置pdf文件地址    .defaultPage(6)   //設置默認顯示第1頁    .onPageChange(this)  //設置翻頁監聽    .onLoad(this)   //設置加載監聽    .onDraw(this)   //繪圖監聽    .showMinimap(false)  //pdf放大的時候,是否在屏幕的右上角生成小地圖    .swipeVertical( false ) //pdf文檔翻頁是否是垂直翻頁,默認是左右滑動翻頁    .enableSwipe(true) //是否允許翻頁,默認是允許翻頁    // .pages( 2 , 3 , 4 , 5 ) //把2 , 3 , 4 , 5 過濾掉    .load(); } private void displayFromFile( File file ) {  pdfView.fromFile(file) //設置pdf文件地址    .defaultPage(6)   //設置默認顯示第1頁    .onPageChange(this)  //設置翻頁監聽    .onLoad(this)   //設置加載監聽    .onDraw(this)   //繪圖監聽    .showMinimap(false)  //pdf放大的時候,是否在屏幕的右上角生成小地圖    .swipeVertical( false ) //pdf文檔翻頁是否是垂直翻頁,默認是左右滑動翻頁    .enableSwipe(true) //是否允許翻頁,默認是允許翻    // .pages( 2 , 3 , 4 , 5 ) //把2 , 3 , 4 , 5 過濾掉    .load(); }

本地沒有pdf文件,需要從服務端獲取,

 DownLoadPDF.getInstance().downLoadPDF(ShowPDFActivity.this, //下載路徑);

public class DownLoadPDF { private static Context context; private static File file ; private static CustomDialog builder = null ; private static Handler ddhandle; private static DownLoadPDF instance = null; public static DownLoadPDF getInstance(){  if(instance==null){   synchronized (DownLoadPDF.class){    if(instance==null){     instance = new DownLoadPDF();    }   }  }  return instance; } public void downLoadPDF(final Context con, final String url, final String title, final Handler ddhandler) {  ddhandle = ddhandler;  context = con;  builder = new CustomDialog(con);  LayoutInflater inflater = (LayoutInflater) con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);  View view = inflater.inflate(R.layout.dialog_pdf_progress_new, null);  builder.setContentView(view);  builder.show();  new Thread() {   @Override   public void run() {    try {     file = getFileFromServer(url,title);     sleep(200);     if (file != null) {      handler.sendEmptyMessage(2);     }    } catch (Exception e) {     e.printStackTrace();     builder.dismiss();     handler.sendEmptyMessage(-1);    }   }  }.start(); } public void closeDilaoig(){  if (builder != null&&builder.isShowing()) {   builder.dismiss();  } }public static int length ; public static File getFileFromServer(String path,String title)   throws Exception {  // 如果相等的話表示當前的sdcard掛載在手機上并且是可用的  if (Environment.getExternalStorageState().equals(    Environment.MEDIA_MOUNTED)) {   URL url = new URL(path);   HttpURLConnection conn = (HttpURLConnection) url.openConnection();   conn.setConnectTimeout(5000);   conn.setDoInput(true);   conn.connect();   length = conn.getContentLength();   InputStream is = conn.getInputStream();   //將pdf文件存儲在指定文件夾下   File filePath = new File(//指定文件夾路徑);   if (!filePath.exists()){    filePath.mkdir();   }   File file = new File(filePath , title+".pdf");   FileOutputStream fos = new FileOutputStream(file);   BufferedInputStream bis = new BufferedInputStream(is);   byte[] buffer = new byte[1024];   int len;   while ((len = bis.read(buffer)) != -1) {    fos.write(buffer, 0, len);    handler.sendEmptyMessage(0);   }   fos.close();   bis.close();   is.close();   return file;  } else {   handler.sendEmptyMessage(-1);   return null;  } } private static Handler handler = new Handler(){  @Override  public void handleMessage(Message msg) {   super.handleMessage(msg);   switch (msg.what) {   case 0:    break;   case -1:    //下載失敗    Toast.makeText(context, "下載失敗,請稍后再試!", Toast.LENGTH_SHORT).show();    break;   case 2:    ddhandle.sendEmptyMessage(100);    break;   default:    break;   }  } };}

大家可以看到,在pdf問價下載成功的時候handler.sendEmptyMessage(2);,當case為2的時候,通過調用該工具類的頁面傳過來的ddhandle重新發送了一個消息,

調用界面收到消息后會重新調用refushUI();這個方法來打開pdf文件。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VEVB武林網!


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九江市| 拉孜县| 亳州市| 长宁区| 梓潼县| 邛崃市| 漠河县| 阿尔山市| 鄂托克旗| 和硕县| 封开县| 宁阳县| 贞丰县| 兴文县| 高要市| 哈尔滨市| 浦东新区| 如皋市| 乾安县| 清河县| 琼海市| 乌兰察布市| 富裕县| 西林县| 呼玛县| 泰来县| 额尔古纳市| 新晃| 吐鲁番市| 黄冈市| 晴隆县| 扶沟县| 内黄县| 宁安市| 巴南区| 房山区| 清丰县| 西畴县| 钦州市| 汉川市| 厦门市|