我正在处理一些应该能够在我的应用程序中阅读 PDF 的内容,并且我想将 PDF View 放入我的 自定义布局。我更喜欢 Android PDF 查看器,但是当我执行 zoomIn、zoomOut 时,需要太多时间。
所以目前我应该使用 MuPDF 开源项目来集成到我的项目中,它是基于 JNI 的,我不习惯。
我正在使用 Cygwin 为本地代码构建库。因此,我不清楚一些事情:
如何在我的项目中集成 MuPDF(根据我的问题标题)?
一旦我成功集成了它,那么如何将 PDF 阅读器放入我的自定义 View (以 XML 或编程方式)?
最佳答案
我不知道如何在 Windows 中使用 cygwin 执行此操作,因为我正在使用 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/文件夹中
- 构建项目 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
这里解释了解决方案: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
- MuPDFCore.java
- PixmapView.java
只需复制项目中的最后两个文件。并查看 MuPDFActivity.java 中的示例,了解如何在 Activity 中嵌入 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 - 在应用程序中集成 MuPDF Reader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8500530/