在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不存在】, 引入包即可
时间: 2024-08-06 03:45:42

在Android项目中引入MuPdf的相关文章

解决Android工程中引入codec.jar包报错问题

在Android项目中使用到了org.apache.commons.codec.jar包下的Hex.encodeHexString(byte[] input)方法进行加密.结果编译通过,运行时总是报java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Hex.encodeHexString([B)Ljava/lang/String;错误. 原因:Google Android内部也有一个包名一样的工程,而且类名也相同,关键一点是没

Android项目中自定义顶部标题栏

Android项目中自定义顶部标题栏 下面给大家详细介绍android中自定义顶部标题栏的思路及实现方式 先来图:     思路及实现步骤 1.定义标题栏布局 2.自定义TitleActivity控制标题栏按钮监听 3.在TitleActivity中实现标题栏以下内容切换 首先定义标题栏 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http:/

Android项目中gen文件下R文件无法生成的解决的方法

帮一个网友解决R文件无法生成的问题,搜集了些材料特整理例如以下,刚開始学习的人參考他人代码时极易出现此种问题,一般都是xml文件出错,无法被正确解析. gen文件夹无法更新,或者gen文件夹下的R.JAVA文件无法生成 1.gen文件夹的用处 android gen文件夹下的R.java并非由用户创建,而是androidproject本身将android的资源进行自己主动"编号"(ID)值. 2.gen文件夹下R文件无法更新/生成的原因 1)res文件夹下的layout下的xml文件名

Android项目中如何用好构建神器Gradle?

摘要:本文作者贾吉鑫为大众点评Android工程师,在进行团队并行开发时,分库遇到的问题很多都要通过Gradle脚本解决.Gradle虽为构建神器,但学习曲线比较陡峭,要想在Android项目中用好Gradle必须要做到三点. Android Gradle实战 下面讲讲在Android Gradle实战中遇到的一些问题和经验,感觉还是蛮多干货的. productFlavors 这个东西基本上已经烂大街了,gradle的项目一般都会使用Product Flavor,看完美团的文章,你应该就懂了.

Android项目中gen文件下R文件无法生成的解决办法

帮一个网友解决R文件无法生成的问题,搜集了些材料特整理如下,初学者参考他人代码时极易出现此种问题,一般都是xml文件出错,无法被正确解析. gen目录无法更新,或者gen目录下的R.JAVA文件无法生成 1.gen目录的用处 android gen目录下的R.java并不是由用户创建,而是android工程本身将android的资源进行自动"编号"(ID)值. 2.gen目录下R文件无法更新/生成的原因 1)res目录下的layout下的xml文件名有错.按照android的命名规范是

[转载]android工程中引入另一个工程中的资源

原文地址:android工程中引入另一个工程中的资源作者:87fayuan 在项目中可能遇到这样的问题:项目过大,于是细分为N个子模块来做,每个模块都是不同的工程.涉及到activity传数据时,可以用intent等方法来解决.但是如果涉及到要共用资源,而又不能像传统java程序那样打成jar包,比如程序中有大量自定义view,而这些自定义view都引用了的一些资源文件时,就可以用这个方法. 工程一:MyViews 代码如下: public class MyTextView extends Te

Android项目中使用类似菊花的Dialog

Android项目中使用类似菊花的Dialog 效果图一: 项目中使用的效果图二: 1.首先定义动画文件 <?xml version="1.0" encoding="utf-8"?> <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/loading2"

android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

1.下载工具 xstream 下载最新版本地址: https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/ 下载完成后 把jar包导入到自己的android项目中 2.asset 文件夹 下的 aa.xml 文件 <?xml version="1.0" encoding="UTF-8"?><product>    <name>

Android第4坑:Android项目中使用lambda表达式

Android项目中使用lambda表达式或Java8新特性,需要在app/build.gradle中添加如下配置 android { ... defaultConfig { ... jackOptions.enabled = true } compileOptions{ sourceCompatibility org.gradle.api.JavaVersion.VERSION_1_8 targetCompatibility org.gradle.api.JavaVersion.VERSION