中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android應用中怎么對本地pdf文件進行加載

發布時間:2020-12-04 16:01:34 來源:億速云 閱讀:218 作者:Leah 欄目:移動開發

這篇文章給大家介紹Android應用中怎么對本地pdf文件進行加載,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

大部分app打開pdf文件是通過intent調起手機中能打開pdf文件的工具,來查看pdf文件,如果需求是,用戶在app內下載好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文件。

關于Android應用中怎么對本地pdf文件進行加載就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

淳化县| 淮滨县| 攀枝花市| 行唐县| 天等县| 岳西县| 固安县| 府谷县| 惠安县| 仁寿县| 行唐县| 河津市| 杨浦区| 徐州市| 濉溪县| 万载县| 齐河县| 大新县| 郎溪县| 怀宁县| 山西省| 马龙县| 黑水县| 湘阴县| 菏泽市| 桦甸市| 噶尔县| 宝丰县| 定州市| 定日县| 郓城县| 岚皋县| 福安市| 加查县| 龙江县| 壤塘县| 崇明县| 屏南县| 龙州县| 仁怀市| 柏乡县|