Android显示PDF文件

最近由于项目需要,大致了解了一下关于如何在Android端显示PDF文件的内容,因此在这里进行一下小小的总结,方便今后开发。我目前了解到并成功实现的有三种开源框架分别是:Android PdfViewer、MUpdf以及iText,

  • Android PdfViewer

  • MUpdf

  • iText


其中Android PdfViewer、MUpdf是显示PDF文件中所有文件,而iText则主要是方便用于解析PDF文件中的文本信息,这里主要介绍Android PdfViewer的使用方法:
Android PdfViewer的使用方法最是简单,直接添加依赖即可,而且显示效果也相当好,但功能没有MUpdf全面,且解析速度比MUpdf稍稍慢一点点,特别是在解析大文件的时候更加明显,但就普通的PDF文件显示的话还是完全能够胜任的。

GitHub地址:https://github.com/barteksc/AndroidPdfViewer

其实在这个GitHub地址里已经有详细的说明了,不必下载直接添加依赖

compile 'com.github.barteksc:android-pdf-viewer:2.7.0-beta.1'

添加完依赖后就可以直接使用了,简直不要太方便,下面是布局文件。

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="www.alphamap.cn.test02.MainActivity">    <com.github.barteksc.pdfviewer.PDFView        android:id="@+id/pdfView"        android:layout_width="match_parent"        android:layout_height="match_parent">    com.github.barteksc.pdfviewer.PDFView>    <Button        android:onClick="button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="打开pdf" />RelativeLayout>

然后是MainActivity里的,记得要.load():

pdfView.fromFile(new File("文件路径")).load();

或者按照GitHub里介绍的:

pdfView.fromUri(Uri)orpdfView.fromFile(File)orpdfView.fromBytes(byte[])orpdfView.fromStream(InputStream) // stream is written to bytearray - native code cannot use Java StreamsorpdfView.fromSource(DocumentSource)orpdfView.fromAsset(String)    .pages(0, 2, 1, 3, 3, 3) // all pages are displayed by default    .enableSwipe(true) // allows to block changing pages using swipe    .swipeHorizontal(false)    .enableDoubletap(true)    .defaultPage(0)    // allows to draw something on the current page, usually visible in the middle of the screen    .onDraw(onDrawListener)    // allows to draw something on all pages, separately for every page. Called only for visible pages    .onDrawAll(onDrawListener)    .onLoad(onLoadCompleteListener) // called after document is loaded and starts to be rendered    .onPageChange(onPageChangeListener)    .onPageScroll(onPageScrollListener)    .onError(onErrorListener)    .onRender(onRenderListener) // called after document is rendered for the first time    .enableAnnotationRendering(false) // render annotations (such as comments, colors or forms)    .password(null)    .scrollHandle(null)    .enableAntialiasing(true) // improve rendering a little bit on low-res screens    // spacing between pages in dp. To define spacing color, set view background    .spacing(0)     .load();

记得添加权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

如果系统是Android6.0版本以上的话不要忘了获取动态权限,附带获取动态权限代码:

package www.alphamap.cn.test02;import android.Manifest;import android.app.Activity;import android.content.pm.PackageManager;import android.os.Environment;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.os.Bundle;import android.util.Log;import android.view.View;import com.github.barteksc.pdfviewer.PDFView;import java.io.File;public class MainActivity extends Activity {    private PDFView pdfView;    private static final int REQUEST_EXTERNAL_STORAGE = 1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取动态权限        getPermission();    }    public void button(View view){        pdfView = (PDFView) findViewById(R.id.pdfView);        pdfView.fromFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/AlphaMap/58号文.pdf")).load();    }    private static String[] PERMISSIONS_STORAGE = {            Manifest.permission.READ_EXTERNAL_STORAGE,            Manifest.permission.WRITE_EXTERNAL_STORAGE    };    /**     * 获取动态权限     */    public void getPermission(){        int hasWriteContactsPermission = ContextCompat.checkSelfPermission(MainActivity.this,                Manifest.permission.READ_EXTERNAL_STORAGE);        if (hasWriteContactsPermission != PackageManager.PERMISSION_GRANTED) {            if (!ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this,                    Manifest.permission.READ_EXTERNAL_STORAGE)) {                Log.d("yx","get permission");                ActivityCompat.requestPermissions(MainActivity.this,                        PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);            }            Log.d("yx","get permission2");            ActivityCompat.requestPermissions(MainActivity.this,                    PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);        }        Log.d("yx","wait for PERMISSION_GRANTED");        while (( ContextCompat.checkSelfPermission(MainActivity.this,                Manifest.permission.READ_EXTERNAL_STORAGE))!= PackageManager.PERMISSION_GRANTED) {        }        Log.d("yx","wait for PERMISSION_GRANTED finish");    }}

更多相关文章

  1. 【Android动态布局】之【LayoutInflater的使用】
  2. android NDK mk文件模板
  3. android动态加载jar包中的图片
  4. 4.0 Android中资源文件
  5. Android 6.0以上权限拒绝打开权限设置界面
  6. Android定制权限重名引起的问题
  7. android的apk文件的xml提取
  8. Android导入第三方静态库.a编译成动态库.so

随机推荐

  1. 如何使用Jdbc和Servlet操作Mysql数据库,编
  2. Android 瘦身之道 ---- so文件
  3. Android系统构架简介
  4. Android复合文本SpannableString使用总结
  5. Android中使用硬盘模拟SD卡
  6. Android FileProvider应用之间共享数据
  7. Android 4.4 meminfo 实现分析
  8. 2011年linux数据库的android在线分享
  9. Android Studio 第一次新建Android Gradl
  10. [Android] 内存泄漏调试经验分享 (一)