我正在开发一个能够在我的应用程序中读取PDF的功能,并且希望将PDF视图放置在我的自定义布局中。我本来想使用Android PDF Viewer,但是当我执行缩放时,它需要太长时间了。
因此,我现在打算使用MuPDF开源项目来集成到我的项目中,它基于JNI,而我不熟悉JNI。
我正在使用Cygwin构建本地代码库。 因此,我不清楚以下几个问题:
如何将MuPDF集成到我的项目中(根据我的问题标题)?
一旦成功集成,我该如何将PDF阅读器放入我的自定义视图中(在XML或编程方式中)?
我正在开发一个能够在我的应用程序中读取PDF的功能,并且希望将PDF视图放置在我的自定义布局中。我本来想使用Android PDF Viewer,但是当我执行缩放时,它需要太长时间了。
因此,我现在打算使用MuPDF开源项目来集成到我的项目中,它基于JNI,而我不熟悉JNI。
我正在使用Cygwin构建本地代码库。 因此,我不清楚以下几个问题:
如何将MuPDF集成到我的项目中(根据我的问题标题)?
一旦成功集成,我该如何将PDF阅读器放入我的自定义视图中(在XML或编程方式中)?
我不知道如何在Windows上使用cygwin做到这一点,因为我正在使用Ubuntu进行开发。但我认为流程应该是相同的。
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
解决方法在这里解释:mupdf for android: ndk-build problem (error: redefinition of typedef....) 但是,您可以简单地注释/thirdparty/jbig2dec/os_types.h文件中类型定义的行。
之后,您将获得两个库:一个静态库和一个共享库,可供您的Android应用程序使用。
StaticLibrary : libmupdfthirdparty.a
SharedLibrary : libmupdf.so
这是第一个问题的答案。在android/Readme.txt文件中还有一个很棒的步骤指南。
现在回答第二个问题。 在android应用程序中,您可以找到测试项目。其中包含3个文件:
只需将最后两个文件复制到您的项目中。并参考MuPDFActivity.java中的示例,了解如何在您的活动中嵌入mupdf布局。在该文件中,它是这样完成的:
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(链接已失效)
Android-pdf
的新文件夹中,并将解压缩文件夹重命名为mupdf
和android-ndk
(您可以随意更改名称)cd
,直到您进入android-pdf
文件夹cd mupdf
,然后输入命令make
(大约需要40秒来运行所有脚本)cd android
(位于mupdf
目录中)Android-pdf
,然后将android-ndk
中的文件ndk-build
拖到终端命令行中并输入(基本上是添加一个路径到ndk-build以操作mupdf库)。几秒钟后,您应该在mupdf > android > libs > ...
内部有一个新文件夹,将其用于您的Android项目。更改
MUPDF_ROOT := ..
为
MUPDF_ROOT := $(TOP_LOCAL_PATH)
更改为
MY_ROOT:= ../..
MY_ROOT := $(LOCAL_PATH)
将LOCAL_C_INCLUDES中的所有
..
更改为
$(LOCAL_PATH)
将
MY_ROOT := ../..
修改为
MY_ROOT := $(LOCAL_PATH)
$(LOCAL_PATH)
在 '' 标签之间,将 /android 文件夹中的 AndroidManifest.xml
文件中的所有活动列表粘贴进去。 你应该从 mupdf 中的 AndroidManifest.xml 的工作副本中复制。
MuPDF 现在已经在你现有的 Eclipse 项目中。要使用它,请在你的应用程序中调用 com.artifex.mupdf.ChoosePDFActivity.class
。这是 MuPDF 的主类。
要使用前缀文件打开 pdf:
Uri uri = Uri.parse("pdf 文件路径");
Intent intent = new Intent(context, MuPDFActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setData(uri);
context.startActivity(intent);
EBookDroid is an open source (GPL'ed) document viewer for Android based on the VuDroid code base.
Supported the file in following formats:
PDF DjVu XPS (OpenXPS) comics books (cbz,cbr)
star18bit
给出的答案基本上概括了一切,但即使按照那个方法,我仍然遇到了很多问题。
比如 make
命令对我不起作用,我不得不使用 Visual Studio 进行构建。所以我列出了所有的先决软件,例如 ANT。此外,我们需要将 sdk 文件夹中的 tools
和 platform-tools
文件夹添加到 PATH 中。
此外,我还必须在 Core2.mk
文件中进行更改,同样的更改也要在 Core.mk
中进行。我无法在这里提供所有信息,因为它太多了,所以我推荐参考以下链接获取完整信息:
http://howtojava.net/tutorials/android/integrate-mupdf-with-android-in-windows-7
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
。我认为这不是正确的方式?