将 MuPDF Reader 集成到应用程序中

发布于 2024-12-20 22:05:25 字数 513 浏览 1 评论 0 原文

我正在开发一些应该能够在我的应用程序中读取 PDF 的内容,并且我想将 PDF 视图放入我的自定义布局中。我更喜欢Android PDF Viewer,但当我执行zoomInzoomOut时,它花费了太多时间

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

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

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

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

I am working on some stuff that should be able to read PDF in my app and I want to put PDF view in my custom layout. I had preferred Android PDF Viewer but when I performed zoomIn, zoomOut it takes too much time.

So currently I am supposed to use MuPDF open source project to integrate in my project, it's based on JNI and I am not used to it.

I am using Cygwin to build the library for native code. Hence I am unclear with few things:

  1. how to integrate the MuPDF in my project (as per my question title)?

  2. once I will succeed to integrated it then how can I put PDF reader in my custom view (in the XML or programmaticaly)?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

掩于岁月 2024-12-27 22:05:26

我的应用程序中有查看寻呼机。我需要在视图分页器中的每个片段上显示 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 。我认为它不正确方式?

I have view pager in my application. I need to show pdf files on each fragment in view pager.is there way to get a pdf view from mupdf ? normally we call mupdf as below

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);

So if i use mupdf for my app i have to call MuPDFActivity on each fragment.I think its not a correct way?

維他命╮ 2024-12-27 22:05:26

star18bit 给出的答案几乎概括了这一点,但即使如此,我也遇到了很多问题。

就像 make 命令对我不起作用,我必须使用 Visual Studio 构建它。所以我列出了所有必备软件。就像蚂蚁一样。此外,我们还需要在 PATH 中添加 sdk 文件夹的 toolsplatform-tools 文件夹。

另外,我必须在 Core2.mk 文件中进行更改,与 Core.mk 中的更改相同。我无法在这里提供所有信息,因为信息很多,所以我参考此链接获取完整信息:

http://howtojava.net/tutorials/android/integrate-mupdf-with-android-in-windows-7

The answer given by star18bit pretty much sums it up, but even folllowing that I faced a lot of issues.

Like the make command didn't work for me and I had to build it using Visual Studio. So I listed all the pre-req softwares. Like ANT. Also we need to add the sdk folder's tools and platform-tools folders in PATH.

Also, I had to do the changes in Core2.mk file, the same ones in Core.mk. I can't give all the information here, cause it is a lot, so I referring this link for complete information:

http://howtojava.net/tutorials/android/integrate-mupdf-with-android-in-windows-7

恋竹姑娘 2024-12-27 22:05:25

我不知道如何使用 cygwin 在 Windows 中执行此操作,因为我使用 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. 可以得到如下错误:

Compilethumb : mupdfthirdparty <= jbig2.c
在 /home/yury/programming/android/workspace/mupdf-0.9/android/jni/../../thirdparty/jbig2dec/os_types.h:53 包含的文件中,
来自/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:错误:重新定义 typedef 'int8_t'
/home/yury/programming/android/workspace/mupdf-0.9/android/jni/../../thirdparty/jbig2dec/os_types.h:47:注意:之前的“int8_t”声明在这里

解决方案解释如下:mupdf for android:ndk-build问题(错误: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);

I don't know how to do this in Windows using cygwin, because I'm using Ubuntu for the development. But I think the procedure should be the same.

  1. Download the file mupdf-0.9-source.tar.gz here:
    http://code.google.com/p/mupdf/downloads/list?q=source
  2. Download the file mupdf-thirdparty.zip
  3. Extract the sources. By default they will be extracted to the folder: mupdf-0.9/
  4. Extract the file mupdf-thirdparty.zip into the folder mupdf-0.9/
  5. Build the project mupdf-0.9 (For windows you should use VS as it is declared in the readme files)
  6. Then go to the folder mupdf-0.9/android/
  7. Run ndk-build
  8. You can get the following errors:

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

The solution is explained here: mupdf for android: ndk-build problem (error: redefinition of typedef....)
However, you can simply comment the lines of the definition of types in the file /thirdparty/jbig2dec/os_types.h

After that you will receive two libraries: one static and one shared for your android application.

StaticLibrary  : libmupdfthirdparty.a
SharedLibrary  : libmupdf.so

This was the answer on the first question. Also there is a great step-by-step guide in the android/Readme.txt file.

Now the answer on the second question.
In the application for android you can find test project. There are 3 files:

  • MuPDFActivity.java
  • MuPDFCore.java
  • PixmapView.java

Simply copy the last two files in your project. And see an example in MuPDFActivity.java how you can embed mupdf layout in your activity. In this file it is done like:

    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);
兔小萌 2024-12-27 22:05:25

这是我在 Mac(2012 年,intel i5)上实现的方法:

步骤 1:获取 mupdf-1.2-source.zip

第 2 步:获取 android-ndk-mac-64

步骤 3:解压它们在新文件夹中调用 Android-pdf 并将解压缩文件夹重命名为 mupdfandroid-ndk (您可以随意称呼它们)

第 4 步:打开终端并使用命令:cd直到进入android-pdf文件夹

第5步:cd mupdf然后命令:make (运行所有脚本大约需要 40 秒)

步骤 6:cd android (在 mupdf 目录中。)

步骤 7:打开 finder 进入文件夹 Android-您创建的 pdfandroid-ndk 将文件调用 ndk-build 拖到终端命令行并输入(基本上添加 ndk-build 的路径以在 mupdf lib 上操作。)

几秒后。你应该在 mupdf > 中有一个新文件夹安卓>库> ... 在你的 android 项目中使用它。

如何在现有 Eclipse 项目中使用 MuPDF:

  1. 将 /android 文件夹中的“jni”文件夹复制到现有 Eclipse 项目中。
  2. 将 /thirdparty 文件夹复制到项目中的“jni”文件夹中。
  3. 将 /cbz 文件夹复制到项目中的“jni”文件夹中。
  4. 将 /draw 文件夹复制到项目中的“jni”文件夹中。
  5. 将 /fitz 文件夹复制到项目中的“jni”文件夹中。
  6. 将 / generated 文件夹复制到项目中的“jni”文件夹中。
  7. 将 /pdf 文件夹复制到项目中的“jni”文件夹中。
  8. 将 /scripts 文件夹复制到项目中的“jni”文件夹中。
  9. 将 /xps 文件夹复制到项目中的“jni”文件夹中。
  10. 打开“jni”文件夹中的“Android.mk”。
  11. 改变

    MUPDF_ROOT := ..

MUPDF_ROOT := $(TOP_LOCAL_PATH)
  1. 保存“Android.mk”。
  2. 打开“jni”文件夹中的“Core.mk”。
  3. 改变

    MY_ROOT := ../..

更改为

MY_ROOT := $(LOCAL_PATH)
  1. 更改所有

    ..

LOCAL_C_INCLUDES 中的内容以

$(LOCAL_PATH)
  1. 保存“Core.mk”。
  2. 打开“jni”文件夹中的“ThirdParty.mk”。
  3. 改变

    MY_ROOT := ../..

更改为

MY_ROOT := $(LOCAL_PATH)
  1. 更改全部

    ..

将LOCAL_C_INCLUDES 中

$(LOCAL_PATH)
  1. 更改为保存“ThirdParty.mk”。
  2. 现在在项目的“jni”目录中执行“ndk-build”。
  3. 将 /android/src 文件夹中的所有内容复制到项目中的“src”文件夹中。
  4. 将 /android/res/drawable 文件夹中的所有内容复制到项目中的“res/drawable”文件夹中。
  5. 将 /android/res/drawable-ldpi 文件夹中的所有内容复制到项目中的“res/drawable-ldpi”文件夹中。
  6. 将 /android/res/drawable-mdpi 文件夹中的所有内容复制到项目中的“res/drawable-mdpi”文件夹中。
  7. 将 /android/res/layout 文件夹中除 main.xml 之外的所有内容(因为如果您要复制到现有项目中,那么您应该已经拥有自己的 main.xml 或同等内容)复制到项目中的“res/layout”文件夹中。
  8. 将 /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 中(粘贴在“”标签之间)。
  9. 打开项目中的“AndroidManifest.xml”。
  10. 在 '' 标签之间粘贴

    中的所有活动列表

    AndroidManifest.xml 在 /android 文件夹内,您应该从 mupdf 内的 AndroidManifest.xml 的工作副本复制

  11. MuPDF 现在位于您现有的 Eclipse 项目中。要使用它,请在应用程序中调用com.artifex.mupdf.ChoosePDFActivity.class。这是 MuPDF 的主类。

  12. 要打开带有前缀文件的 pdf:

    Uri uri = Uri.parse("pdf 文件路径");

    Intent意图 = new Intent(context, MuPDFActivity.class);

    intent.setAction(Intent.ACTION_VIEW);

    intent.setData(uri);

    context.startActivity(intent);

希望这有帮助:)

This is How I achieve on my mac (2012, intel i5):

Step 1 : Get mupdf-1.2-source.zip

Step 2 : Get android-ndk-mac-64

Step 3 : unzip both of them in new folder call Android-pdf and rename unzip folder to mupdf and android-ndk (you can call them whatever you like)

Step 4 : open Terminal and use command : cd until you are in android-pdf folder

Step 5 : cd mupdf than command: make (will take about 40 sec. to run all scripts)

Step 6 : cd android (within mupdf dir.)

Step 7 : open finder go to folder Android-pdf that you created than android-ndk drag file call ndk-build into terminal command line and enter (basically adding a path to ndk-build to operate on mupdf lib.)

and after few sec. you should have new folder inside mupdf > android > libs > ... use that in your android project.

How to use MuPDF with your EXISTING Eclipse project:

  1. Copy the 'jni' folder from the /android folder into your existing Eclipse project.
  2. Copy the /thirdparty folder into the 'jni' folder in your project.
  3. Copy the /cbz folder into the 'jni' folder in your project.
  4. Copy the /draw folder into the 'jni' folder in your project.
  5. Copy the /fitz folder into the 'jni' folder in your project.
  6. Copy the /generated folder into the 'jni' folder in your project.
  7. Copy the /pdf folder into the 'jni' folder in your project.
  8. Copy the /scripts folder into the 'jni' folder in your project.
  9. Copy the /xps folder into the 'jni' folder in your project.
  10. Open 'Android.mk' inside the 'jni' folder.
  11. Change

    MUPDF_ROOT := ..

to

MUPDF_ROOT := $(TOP_LOCAL_PATH)
  1. Save 'Android.mk'.
  2. Open 'Core.mk' inside the 'jni' folder.
  3. Change

    MY_ROOT := ../..

to

MY_ROOT := $(LOCAL_PATH)
  1. Change all the

    ..

in LOCAL_C_INCLUDES to

$(LOCAL_PATH)
  1. Save 'Core.mk'.
  2. Open 'ThirdParty.mk' inside the 'jni' folder.
  3. Change

    MY_ROOT := ../..

to

MY_ROOT := $(LOCAL_PATH)
  1. Change all the

    ..

in LOCAL_C_INCLUDES to

$(LOCAL_PATH)
  1. Save 'ThirdParty.mk'.
  2. Now execute 'ndk-build' in your project's 'jni' directory.
  3. Copy everything in the /android/src folder into the 'src' folder in your project.
  4. Copy everything in the /android/res/drawable folder into the 'res/drawable' folder in your project.
  5. Copy everything in the /android/res/drawable-ldpi folder into the 'res/drawable-ldpi' folder in your project.
  6. Copy everything in the /android/res/drawable-mdpi folder into the 'res/drawable-mdpi' folder in your project.
  7. Copy everything in the /android/res/layout folder EXCEPT main.xml (because if you are copying into an existing project then you should already have your own main.xml or equivalent) into the 'res/layout' folder in your project.
  8. Copy everything in the /android/res/values folder into the 'res/values' folder in your project. If you already have a 'strings.xml' in your existing project, copy everything in between the '' tags in your /android/res/values/strings.xml into your project's strings.xml (paste between the '' tags). Similarly with the 'colors.xml', if you already have a 'colors.xml' in your existing project, copy everything in between the '' tags in your /android/res/values/strings.xml into your project's strings.xml (paste between the '' tags).
  9. Open the 'AndroidManifest.xml' in project.
  10. In between the '' tags paste all the list of activities from

    AndroidManifest.xml inside the /android folder, You should copy from your working copy of AndroidManifest.xml inside mupdf.

  11. MuPDF in now in your existing Eclipse project. To use it, call up com.artifex.mupdf.ChoosePDFActivity.class in your application. This is the main class for MuPDF.

  12. To open pdf with pre-fix file:

    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);

Hope this help :)

思慕 2024-12-27 22:05:25

检查此项目 eBookDroid

EBookDroid 是一款基于 VuDroid 代码库的 Android 开源(GPL)文档查看器。

支持以下格式的文件:

<前><代码>PDF
DJVu
XPS (OpenXPS)
漫画书(cbz、cbr)

Check this project eBookDroid

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文