我正在研究一些应该能够在我的应用中阅读 PDF 的内容,并希望将PDF视图放在我的自定义布局中。我更喜欢 Android PDF Viewer ,但当我执行 zoomIn , zoomOut 时,需要花费太多时间。
所以目前我应该使用 MuPDF 开源项目集成到我的项目中,它基于 JNI ,我不习惯。
我正在使用 Cygwin 来构建本机代码库。因此,我不清楚几件事:
如何在我的项目中整合 MuPDF (根据我的问题标题)?
一旦我成功整合它,那么如何将PDF阅读器放入自定义视图(在XML或programmaticaly中)?
答案 0 :(得分:47)
我不知道如何使用cygwin在Windows中执行此操作,因为我使用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);
答案 1 :(得分:15)
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(死链接)
答案 2 :(得分:7)
这是我在Mac上的表现(2012,intel i5):
第1步:获取mupdf-1.2-source.zip
第2步:获取android-ndk-mac-64
第3步:在新文件夹调用Android-pdf
中解压缩它们并将解压缩文件夹重命名为mupdf
和android-ndk
(您可以随意调用它们)
步骤4:打开终端并使用命令:cd
,直到您进入android-pdf
文件夹
步骤5:cd mupdf
而不是命令:make
(运行所有脚本大约需要40秒)
第6步:cd android
(mupdf
dir内)
步骤7:打开查找程序转到您创建的文件夹Android-pdf
,而不是android-ndk
拖动文件调用ndk-build
到终端命令行并输入(基本上添加了ndk-build的路径来操作在mupdf lib上。)
几秒后你应该在你的android项目中使用mupdf > android > libs > ...
内的新文件夹。
如何在您的现有Eclipse项目中使用MuPDF:
更改
MUPDF_ROOT:= ..
到
MUPDF_ROOT := $(TOP_LOCAL_PATH)
更改
MY_ROOT:= ../..
到
MY_ROOT := $(LOCAL_PATH)
更改所有
...
$(LOCAL_PATH)
更改
MY_ROOT:= ../..
到
MY_ROOT := $(LOCAL_PATH)
更改全部
...
LOCAL_C_INCLUDES
$(LOCAL_PATH)
在''标签之间粘贴来自
的所有活动列表 / android文件夹中的 AndroidManifest.xml
,你应该从mupdf里面的AndroidManifest.xml的工作副本中复制。
现在的Eclipse项目中的MuPDF。要使用它,请在您的应用程序中调用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(意图);
希望这有帮助:)
答案 3 :(得分:5)
检查此项目eBookDroid
EBookDroid是基于VuDroid代码库的Android开源(GPL&#39; ed)文档查看器。
支持以下格式的文件:
PDF DjVu XPS (OpenXPS) comics books (cbz,cbr)
答案 4 :(得分:0)
我的应用程序中有查看分页器。我需要在视图pager中的每个片段上显示pdf文件。是否可以从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
。我认为这不正确吗?
答案 5 :(得分:0)
star18bit
给出的答案几乎总结了一下,但即便如此,我也面临很多问题。
就像make
命令对我没有用,我必须使用Visual Studio构建它。所以我列出了所有pre-req软件。像ANT一样。我们还需要在PATH中添加sdk文件夹的tools
和platform-tools
个文件夹。
另外,我必须在Core2.mk
文件中进行更改,与Core.mk
中的更改相同。我不能在这里提供所有信息,因为它很多,所以我在这个链接中提供了完整的信息:
http://howtojava.net/tutorials/android/integrate-mupdf-with-android-in-windows-7