在应用程序中集成MuPDF Reader
我正在处理一些应该能够在我的应用程序中阅读PDF的东西,并且希望将PDF视图放在我的自定义布局中 。 我更喜欢Android PDF Viewer,但是当我执行zoomIn时 , zoomOut需要太多的时间 。
所以目前我应该使用MuPDF开源项目来整合我的项目,它基于JNI ,我不习惯。
我正在使用Cygwin为本机代码构build库。 因此我不清楚几件事情:
-
如何将MuPDF整合到我的项目中(按照我的问题标题)?
-
一旦我将成功整合它,那么我怎么能把PDF阅读器放在我的自定义视图中 (在XML或程序devise中)?
我不知道如何使用cygwin在Windows中执行此操作,因为我正在使用Ubuntu进行开发。 但我认为程序应该是一样的。
- 在此下载文件mupdf-0.9-source.tar.gz: http : //code.google.com/p/mupdf/downloads/list? q=source
- 下载文件mupdf-thirdparty.zip
- 提取来源。 默认情况下,它们将被提取到文件夹:mupdf-0.9 /
- 将文件mupdf-thirdparty.zip解压缩到文件夹mupdf-0.9 /
- 构build项目mupdf-0.9(对于windows,您应该使用VS,因为它在自述文件中声明)
- 然后去文件夹mupdf-0.9 / android /
- 运行ndk-build
- 您可以得到以下错误:
Compile thumb : mupdfthirdparty <= jbig2.c In file included from /home/yury/programming/android/workspace/mupdf-0.9/android/jni/../../thirdparty/jbig2dec/os_types.h:53, from /home/yury/programming/android/workspace/mupdf-0.9/android/jni/../../thirdparty/jbig2dec/jbig2.c:22: /home/yury/software/android-ndk-r6b/platforms/android-8/arch-arm/usr/include/stdint.h:48: error: redefinition of typedef 'int8_t' /home/yury/programming/android/workspace/mupdf-0.9/android/jni/../../thirdparty/jbig2dec/os_types.h:47: note: previous declaration of 'int8_t' was here
解决scheme在这里解释: mupdf为android:ndk-build问题(错误:重定义typedef ….)但是,您可以简单地评论文件/thirdparty/jbig2dec/os_types.h中的types定义的行
之后,您将收到两个库:一个静态和一个为您的Android应用程序共享。
StaticLibrary : libmupdfthirdparty.a SharedLibrary : libmupdf.so
这是第一个问题的答案。 在android / Readme.txt文件中还有一个很好的分步指南。
现在是第二个问题的答案。 在Android的应用程序,你可以findtesting项目。 有3个文件:
- MuPDFActivity.java
- MuPDFCore.java
- PixmapView.java
只需复制项目中的最后两个文件。 在MuPDFActivity.java中看到一个例子,您可以如何在您的活动中embeddedmupdf布局。 在这个文件中,它是这样做的:
PixmapView pixmapView; //... layout = new RelativeLayout(this); //... RelativeLayout.LayoutParams pixmapParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.FILL_PARENT, RelativeLayout.LayoutParams.FILL_PARENT); pixmapParams.addRule(RelativeLayout.ABOVE,100); layout.addView(pixmapView, pixmapParams); setContentView(layout);
Android应用程序中的PDF查看器的一些源代码文件。 检查链接并尝试:
http://code.google.com/p/apv/source/browse/
http://code.google.com/p/android-pdf/
http://code.google.com/p/droidreader/
http://andpdf.sourceforge.net/
http://soft.udm4.com/downloading/pdf_viewer_open_source_code_in_android/ (无效链接)
http://open-app.org/2011/02/pdf-viewer-a-simple-open-source-pdf-viewer-for-android/ (无效链接)
http://androidunderground.blogspot.com/2011/08/pdf-viewer-has-colors-and-speed-but.html (无效链接)
这是我如何实现我的Mac(2012,英特尔i5):
第1步:获取mupdf-1.2-source.zip
第2步:获取android-ndk-mac-64
第3步:解压缩它们在新文件夹中调用Android-pdf
并将解压缩文件夹重命名为mupdf
和android-ndk
(无论你喜欢什么,都可以调用它们)
第4步:打开terminal,并使用命令: cd
直到你在android-pdf
文件夹
步骤5:cd mupdf
比命令: make
(将花费大约40秒来运行所有脚本)
第6步:cd android
(在mupdf
目录内)
第7步:打开finder到你创build的文件夹Android-pdf
比android-ndk
拖动文件调用ndk-build
到terminal命令行并进入(基本上添加一个pathndk-build操作mupdf lib)。
几秒钟后。 你应该有新的文件夹内mupdf > android > libs > ...
在你的Android项目中使用。
如何在您的EXISTING Eclipse项目中使用MuPDF:
- 将/ android文件夹中的'jni'文件夹复制到现有的Eclipse项目中。
- 将/ thirdparty文件夹复制到项目中的“jni”文件夹中。
- 将/ cbz文件夹复制到项目中的“jni”文件夹中。
- 将/ draw文件夹复制到项目中的“jni”文件夹中。
- 将/ fitz文件夹复制到项目中的“jni”文件夹中。
- 将/ generated文件夹复制到项目中的“jni”文件夹中。
- 将/ pdf文件夹复制到项目中的“jni”文件夹中。
- 将/ scripts文件夹复制到项目中的“jni”文件夹中。
- 将/ xps文件夹复制到项目中的“jni”文件夹中。
- 在“jni”文件夹中打开“Android.mk”。
-
更改
MUPDF_ROOT:= ..
至
MUPDF_ROOT := $(TOP_LOCAL_PATH)
- 保存“Android.mk”。
- 在“jni”文件夹中打开“Core.mk”。
-
更改
MY_ROOT:= ../ ..
至
MY_ROOT := $(LOCAL_PATH)
-
改变所有
..
在LOCAL_C_INCLUDES中
$(LOCAL_PATH)
- 保存“Core.mk”。
- 在“jni”文件夹中打开“ThirdParty.mk”。
-
更改
MY_ROOT:= ../ ..
至
MY_ROOT := $(LOCAL_PATH)
-
改变所有
..
在 LOCAL_C_INCLUDES中
$(LOCAL_PATH)
- 保存“ThirdParty.mk”。
- 现在在项目的'jni'目录下执行'ndk-build'。
- 将/ android / src文件夹中的所有内容复制到项目的“src”文件夹中。
- 将/ android / res / drawable文件夹中的所有内容复制到项目中的“res / drawable”文件夹中。
- 将/ android / res / drawable-ldpi文件夹中的所有内容复制到项目中的“res / drawable-ldpi”文件夹中。
- 将/ android / res / drawable-mdpi文件夹中的所有内容复制到项目中的“res / drawable-mdpi”文件夹中。
- 将所有内容复制到/ android / res / layout文件夹EXCEPT main.xml中(因为如果复制到现有项目中,则应该已经拥有自己的main.xml或等效文件)放到项目的“res / layout”文件夹中。
- 将/ android / res / values文件夹中的所有内容复制到项目中的“res / values”文件夹中。 如果你现有的项目中已经有了一个“strings.xml”,把你的/android/res/values/strings.xml中的''标签之间的所有内容复制到你的项目的strings.xml中(粘贴在''标签之间)。 与“colors.xml”类似,如果您现有项目中已经有了“colors.xml”,则将/android/res/values/strings.xml中的标记之间的所有内容复制到项目的strings.xml中(在'标签之间粘贴)。
- 在项目中打开“AndroidManifest.xml”。
-
在''标签之间粘贴所有活动列表
AndroidManifest.xml
里面的/ android文件夹, 你应该从你的工作副本 AndroidManifest.xml里面mupdf。 -
现在在您现有的Eclipse项目中使用MuPDF。 要使用它,请在您的应用程序中调用
com.artifex.mupdf.ChoosePDFActivity.class
。 这是MuPDF的主要课程。 -
用预修补文件打开pdf:
Uri uri = Uri.parse(“pdf文件path”);
Intent intent = new Intent(context,MuPDFActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setData(URI);
context.startActivity(意向);
希望这个帮助:)
检查这个项目eBookDroid
EBookDroid是一个基于VuDroid代码库的基于Android的开源(GPL'ed)文档查看器。
支持以下格式的文件:
PDF DjVu XPS (OpenXPS) comics books (cbz,cbr)
我在我的应用程序中查看传呼机。 我需要在视图中的每个片段显示PDF文件pager.is有办法从mupdf
获得pdf视图? 通常我们称之为mupdf
如下
Uri uri = Uri.parse("path to pdf file"); Intent intent = new Intent(context, MuPDFActivity.class); intent.setAction(Intent.ACTION_VIEW); intent.setData(uri); context.startActivity(intent);
所以,如果我使用mupdf
为我的应用程序,我必须调用每个片段的MuPDFActivity
认为它不是一个正确的方法?
star18bit
给出的star18bit
几乎总结了一下,但即使是在我面临很多问题。
像make
命令不适合我,我必须使用Visual Studio来构build它。 所以我列出了所有的pre-req软件。 像ANT一样。 我们还需要在PATH中添加sdk文件夹的tools
和platform-tools
文件夹。
另外,我不得不在Core2.mk
文件中进行相同的Core.mk
。 我不能在这里提供所有的信息,因为它是很多,所以我指的是这个链接的完整信息:
http://howtojava.net/tutorials/android/integrate-mupdf-with-android-in-windows-7