关于Android 在线预览PDF文件

本篇文章大部分为转载内容,不过最后有我自己使用后的小总结,原文地址:https://www.jianshu.com/p/9e3ff8385e6f

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布局(可根据自己项目,增减)


<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的包变大。

希望有更多资料的网友在下面留言。

你可能感兴趣的:(随笔)