1. 程式人生 > >關於Android 線上預覽PDF檔案

關於Android 線上預覽PDF檔案

Android PdfViewer:
專案地址: https://github.com/barteksc/AndroidPdfViewer
功能很強大, 使用也比較廣, 親測可以使用.
唯一的缺點 :新增到專案中 會使apk增加16M, 這是最不能接受的, 故棄用.

PdfViewPager:
專案地址: https://github.com/voghDev/PdfViewPager
可載入assets/SD卡/URL(線上預覽) ,(ps: 我目前就是使用的此框架)
優點: 使用比較方便, 也不大

使用:
1.依賴

compile 'es.voghdev.pdfviewpager:library:1.0.3'

2.xml佈局(可根據自己專案,增減)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 
    <RelativeLayout 
        android:id
="@+id/rl_root" style="@style/title_style">
<ImageView android:id="@+id/iv_back" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_centerVertical="true" android:paddingLeft="@dimen/value15" android:src
="@drawable/icon_back" />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="資料詳情" android:textColor="@color/color_white" android:textSize="16sp" /> </RelativeLayout> <RelativeLayout android:id="@+id/remote_pdf_root" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/rl_root"> <es.voghdev.pdfviewpager.library.PDFViewPager android:id="@+id/pdfViewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> <ProgressBar android:id="@+id/pb_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center" /> </RelativeLayout>

3.Activity(有註釋)

public class PDFDatabaseActivity extends BaseActivity implements DownloadFile.Listener { 
    private RelativeLayout pdf_root; 
    private ProgressBar pb_bar; 
    private RemotePDFViewPager remotePDFViewPager; 
    private String mUrl = "http://partners.adobe.com/public/developer/en/xml/AdobeXMLFormsSamples.pdf"; 
    private PDFPagerAdapter adapter;
    private ImageView iv_back; 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_database); 
        initView(); 
        setDownloadListener(); 
    } 


    protected void initView() { 
        pdf_root = (RelativeLayout) findViewById(R.id.remote_pdf_root); 
        pb_bar = (ProgressBar) findViewById(R.id.pb_bar); 
        iv_back = (ImageView) findViewById(R.id.iv_back); 
        iv_back.setOnClickListener(new View.OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                finish(); 
            } 
        }); 
    } 

    /*設定監聽*/ 
    protected void setDownloadListener() { 
        final DownloadFile.Listener listener = this; 
        remotePDFViewPager = new RemotePDFViewPager(this, mUrl, listener); 
        remotePDFViewPager.setId(R.id.pdfViewPager); 
    } 

    /*載入成功呼叫*/ 
    @Override 
    public void onSuccess(String url, String destinationPath) { 
        pb_bar.setVisibility(View.GONE); 
        adapter = new PDFPagerAdapter(this, FileUtil.extractFileNameFromURL(url)); 
        remotePDFViewPager.setAdapter(adapter); updateLayout(); 
    } 

    /*更新檢視*/ 
    private void updateLayout() { 
        pdf_root.removeAllViewsInLayout(); 
        pdf_root.addView(remotePDFViewPager, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
    } 
    /*載入失敗呼叫*/ 
    @Override 
    public void onFailure(Exception e) { 
        pb_bar.setVisibility(View.GONE); ToastUitl.show(this, "資料載入錯誤"); 
    } 
    @Override 
    public void onProgressUpdate(int progress, int total) { 

    }
}

個人總結(非轉載):

查了許多資料發現ios的WebView可以直接預覽pdf檔案,Android的不可以,查資料發現一般Android都有下面種方式瀏覽pdf檔案
1.可以使用Android的外部瀏覽器直接開啟。
2.下載pdf然後使用相關的PdfView開啟(上文的第二種方法,看程式碼應該也是先下載,再預覽)。
3.呼叫手機其他office軟體預覽。
4.使用Google doc支援來展示word,excel,pdf,txt(WebView方式線上預覽),
https://docs.google.com/gview?embedded=true&url=文件地址
優點:使用簡單,無需伺服器和客戶端的額外部署工作。
缺點:國內需要翻牆訪問。
5.有第三方的SDK,不過會讓apk的包變大。

希望有更多資料的網友在下面留言。