在Android项目中引入MuPdf

Posted $("#阿飞")

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Android项目中引入MuPdf相关的知识,希望对你有一定的参考价值。


由于公司手机App要加入一个附件查看功能,需要查看PDF文件,在网上找了许多第三方工具,最后选择了MuPDF。


更多第三方工具可以查看大神总结的:http://www.cnblogs.com/pokeGame/archive/2011/06/02/2068575.html

MuPDF介绍:

android 设备上轻量级、高品质的 PDF/XPS/CBZ 查看器。

MuPDF 上的呈现器专为高质量的抗失真图像量身打造,它以像素级的精度高品质呈现文字和文字间的间距,从而获得最高级别的显示保真度,在设备屏幕上再现印刷纸张的显示效果。

MuPDF 小巧、快速,但功能完备。它可以支持 PDF 文件的透明化、加密、文件中的超链接、批注、搜索等众多功能;用户还可以利用它查XPS/OPENXPS 文件。MuPDF 采用模块化编程,如果用户非常渴望某些功能,软件集成人员可以将这些功能纳入。

准备工作:

在Androi项目中引入MuPDF,首先要有编译好的包,可在以下地址下载源码编译:git://git.ghostscript.com/mupdf.git,编译过程很复杂,我失败了很多次,目前还不知道到底是哪里有问题。
所以我使用的是别人编译好的:http://pan.baidu.com/s/1CHp3M

有了编译好的包,一切都简单了,现在我们开始引入MuPDF。

引入步骤:

  1. 将jni,libs,obj 文件夹复制到app文件夹下,将res 文件夹复制到app\\src\\main文件夹下,将src\\com文件夹复制到app\\src\\main\\java\\ 文件夹下,覆盖原有文件
  2. 在app中的build.gradle中添加
    //将libs中的.so文件加入APK中
        sourceSets {
            main {
                jniLibs.srcDirs = [\'libs\']
            }
        }

    所有代码如下:

    apply plugin: \'com.android.application\'

    android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"
    defaultConfig {
    applicationId "com.example.admin.pdfread_test2"
    minSdkVersion 17
    targetSdkVersion 24
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
    release {
    minifyEnabled false
    proguardFiles getDefaultProguardFile(\'proguard-android.txt\'), \'proguard-rules.pro\'
    }
    }

    //将libs中的.so文件加入APK中
    sourceSets {
    main {
    jniLibs.srcDirs = [\'libs\']
    }
    }
    }

    dependencies {
    compile fileTree(dir: \'libs\', include: [\'*.jar\'])
    androidTestCompile(\'com.android.support.test.espresso:espresso-core:2.2.2\', {
    exclude group: \'com.android.support\', module: \'support-annotations\'
    })
    compile \'com.android.support:appcompat-v7:24.2.1\'
    testCompile \'junit:junit:4.12\'
    }


  3. AndroidManifest.xml配置MuPDFActivity和SD卡访问权限
    <activity android:name="com.artifex.mupdf.MuPDFActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
    
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    
    
    
    <!--jniLibs.srcDirs = [\'libs\']-->
    <!-- SD卡访问权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><!---->
  4. 调用MuPDF显示PDF文件
          String Workstation_DataFileUrl = getApplicationContext().getFilesDir().getAbsolutePath() + "/sample.pdf";
            Uri uri = Uri.parse(Workstation_DataFileUrl);
            Log.d("MyDebug", Workstation_DataFileUrl);
            Intent intent = new Intent(MainActivity.this, MuPDFActivity.class);
            intent.setAction(Intent.ACTION_VIEW);
            intent.setData(uri);
            startActivity(intent);
  5. 配置你的样式,在values.xml文件中有这样一段配置:
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
            <item name="colorPrimary">@color/colorPrimary</item>
            <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
            <item name="colorAccent">@color/colorAccent</item>
        </style>

    用来配置你的样式,在colors.xml文件中配置对应的颜色

  6. 编译执行,编译时会报错【错误: 程序包R不存在】, 引入包即可

 

在AndroidManifest.xml添加一下配置,配置目录Activity,显示PDF文档中的目录

        <activity android:name="com.artifex.mupdf.OutlineActivity">
        </activity>
 

以上是关于在Android项目中引入MuPdf的主要内容,如果未能解决你的问题,请参考以下文章

为 Android 构建 MUPDF

Android MuPDF 阅读器设置

Android MuPDF 错误

Android PDF Viewer Library 或 muPDF 库教程

切换片段后,Android TabLayout 不再显示内容

如何为 android 构建 mupdf