關於Android 線上預覽PDF檔案
阿新 • • 發佈:2019-02-01
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的包變大。
希望有更多資料的網友在下面留言。