android - 在应用程序中集成 MuPDF Reader

标签 android pdf android-ndk render mupdf

我正在处理一些应该能够在我的应用程序中阅读 PDF 的内容,并且我想将 PDF View 放入我的 自定义布局。我更喜欢 Android PDF 查看器,但是当我执行 zoomInzoomOut 时,需要太多时间

所以目前我应该使用 MuPDF 开源项目来集成到我的项目中,它是基于 JNI 的,我不习惯。

我正在使用 Cygwin 为本地代码构建库。因此,我不清楚一些事情:

  1. 如何在我的项目中集成 MuPDF(根据我的问题标题)?

  2. 一旦我成功集成了它,那么如何将 PDF 阅读器放入我的自定义 View (以 XML 或编程方式)?

最佳答案

我不知道如何在 Windows 中使用 cygwin 执行此操作,因为我正在使用 Ubuntu 进行开发。但我认为程序应该是一样的。

  1. 在此处下载文件 mupdf-0.9-source.tar.gz: http://code.google.com/p/mupdf/downloads/list?q=source
  2. 下载文件 mupdf-thirdparty.zip
  3. 提取来源。默认情况下,它们将被提取到文件夹:mupdf-0.9/
  4. 将 mupdf-thirdparty.zip 文件解压到 mupdf-0.9/文件夹中
  5. 构建项目 mupdf-0.9(对于 Windows,您应该使用自述文件中声明的 VS)
  6. 然后转到文件夹 mupdf-0.9/android/
  7. 运行 ndk-build
  8. 你会得到以下错误:

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/

相关文章:

java - 如何使用 x.509 签名/证书签署 PDF

android - 为什么创建 C++11 线程会导致致命信号?

java - 找到了从 PDF 中提取文本的代码,但它不是为 Android 编写的,我仍然可以将其添加到我的项目中吗?

java - 从 Assets 加载 Android 中的着色器 - 最后有额外的符号?

android - Xamarin Google Play 服务丢失?

android - 如何将 OpenCV 关键点特征保存到数据库?

iOS 中的 Android 基本名称值对列表

android - Logcat : Not granting permission android. 权限.BIND_DEVICE_ADMIN 打包 com.myprojects.myapp (protectionLevel=2 flags=0xbe46)

pdf - 如何使用 PyPDF2 提取目录?

带有 MVC、ContentNegotation、REST 和 PDF 生成器的 Spring 3.2