安卓开发使用mupdf实现pdf文件的预览

    科技2025-12-23  18

    开发环境:android studio3.0.1

    由于项目的需要,要在安卓端实现pdf文件的预览功能,使用到了mupdf这个工具,记录下移植的过程。 首先我用的是已经编译好的so库文件,在github上面有,文件名为mupdf-android-master.zip,下载好解压后在src/main/jniLibs得到如下文件。 将这三个文件夹复制到你新建的工程项目的app/libs目录下,如果没有这个目录的自己建一个。复制好后如下图所示。 接着在你的build.gradle文件里添加如下内容:

    task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") { destinationDir file("$projectDir/libs") baseName "Native_Libs2" extension "jar" from fileTree(dir: "libs", include: "**/*.so") into "lib" } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) }

    点击build/Make Project,成功后在libs目录下会生成Native_Libs2.jar文件。 接着在项目中新建一个包,包名为com.artifex,再在该包下新建两个包,包名为mupdfdemo和utils,包名一个字都不能错,如果新建的包名不一样,后面会提示UnsatisfiedLinkError错误。建好后的包需和下图一样: 然后回到刚刚解压文件夹,把src/main/java/com/artifex下的两个文件夹里的文件全部复制到上面建好的两个包里。 再把src/main/res下的所有文件复制到你的项目的res文件夹下,复制时会有提示说有几个文件已存在是否覆盖?如果你项目是刚建好的可以直接覆盖,否则选择全否,不然你原来的文件会丢失。 最后就可以直接调用MuPDFActivity实现预览了。

    Uri uri = Uri.parse(filename); Intent intent = new Intent(MainActivity.this,MuPDFActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent);

    上张效果图

    如果复制res时没有选择覆盖原文件,那么需要选择性地复制压缩包里values/color.xml和values/string.xml里的内容到你项目文件中。

    Processed: 0.027, SQL: 9