Интегрировать MuPDF Reader в приложение - PullRequest
45 голосов
/ 14 декабря 2011

Я работаю над некоторыми вещами, которые должны иметь возможность читать PDF в моем приложении, и я хочу включить просмотр PDF в мой пользовательский макет . Я предпочел Android PDF Viewer , но когда я выполнил zoomIn , zoomOut , это заняло бы слишком много время .

Так что в настоящее время я должен использовать MuPDF проект с открытым исходным кодом для интеграции в мой проект, он основан на JNI , и я к нему не привык.

Я использую Cygwin для создания библиотеки для нативного кода. Следовательно, мне непонятно несколько вещей:

  1. как интегрировать MuPDF в мой проект (согласно названию моего вопроса)?

  2. как только мне удастся интегрировать его, как я могу поместить программу чтения PDF в мое пользовательское представление (в XML или программно)?

Ответы [ 6 ]

47 голосов
/ 21 декабря 2011

Я не знаю, как сделать это в 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 (для оконвы должны использовать VS, как указано в файлах readme)
  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 для 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, как вы можете встроить макет 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);
15 голосов
/ 22 декабря 2011

Некоторые файлы исходного кода для просмотра PDF в приложении Android.Проверьте ссылки и попробуйте:

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 (неработающая ссылка)

7 голосов
/ 19 июля 2013

Вот как я работаю на своем 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).

и через несколько секунд.у вас должна быть новая папка внутри mupdf > android > libs > ..., используйте ее в своем проекте Android.

Как использовать MuPDF с вашим существующим проектом Eclipse:

  1. Скопируйте папку 'jni' из папки / android в вашсуществующий проект Eclipse.
  2. Скопируйте папку / thirdparty в папку 'jni' вашего проекта.
  3. Скопируйте папку / cbz в папку 'jni' вашего проекта.
  4. Скопируйте папку / draw в папку 'jni' в вашем проекте.
  5. Скопируйте папку / fitz в папку 'jni' в вашем проекте.
  6. Скопируйте / созданную папку впапка 'jni' в вашем проекте.
  7. Скопируйте папку / pdf в папку 'jni' вашего проекта.
  8. Скопируйте папку / scripts в папку 'jni' в вашем проекте.
  9. Скопируйте папку / xps в папку 'jni' в вашем проекте.
  10. Откройте "Android.mk" внутри папки "jni".
  11. Измените

    MUPDF_ROOT: = ..

на

MUPDF_ROOT := $(TOP_LOCAL_PATH)
  1. Сохранить «Android.mk».
  2. Откройте «Core.mk»из папки 'jni'.
  3. Изменить

    MY_ROOT: = ../..

на

MY_ROOT := $(LOCAL_PATH)
  1. Изменить все

    ..

в LOCAL_C_INCLUDES на

$(LOCAL_PATH)
  1. Сохранить 'Core.mk'.
  2. Открыть файл ThirdParty.mk внутри папки 'jni'.
  3. Изменить

    MY_ROOT: = ../..

до

MY_ROOT := $(LOCAL_PATH)
  1. Изменить все the

    ..

in LOCAL_C_INCLUDES до

$(LOCAL_PATH)
  1. Сохранить файл ThirdParty.mk.
  2. Теперь выполните 'ndk-build' в каталоге вашего проекта 'jni'.
  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, Вы должны скопировать из вашей рабочей копии AndroidManifest.xml внутри mupdf.

  11. MuPDF теперь в вашем существующемПроект Eclipse.Чтобы использовать его, вызовите com.artifex.mupdf.ChoosePDFActivity.class в вашем приложении.Это основной класс для MuPDF.

  12. Чтобы открыть pdf с помощью файла предварительного исправления:

    Uri uri = Uri.parse («путь к pdf-файлу»);

    Intent intent = new Intent (context, MuPDFActivity.class);

    intent.setAction (Intent.ACTION_VIEW);

    intent.setData (uri);

    context.startActivity (намерение);

Надеюсь, эта помощь:)

5 голосов
/ 14 декабря 2011

Проверить этот проект eBookDroid

EBookDroid - программа просмотра документов с открытым исходным кодом (под GPL) для Android, основанная на базе кода VuDroid.

Поддерживается файл в следующих форматах:

PDF
DjVu
XPS (OpenXPS)
comics books (cbz,cbr)
0 голосов
/ 09 января 2015

Ответ, данный star18bit, в значительной степени суммирует его, но даже после этого я столкнулся с множеством проблем.

Как будто команда make не сработала для меня, и мне пришлось построитьэто с помощью Visual Studio.Таким образом, я перечислил все предварительные требования программного обеспечения.Как ANT.Также нам нужно добавить папки tools и platform-tools папки sdk в PATH.

Также мне пришлось внести изменения в файл Core2.mk, те же самые, что и в Core.mk.Я не могу дать всю информацию здесь, потому что это много, поэтому я ссылаюсь на эту ссылку для полной информации:

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

0 голосов
/ 03 октября 2014

У меня есть вид пейджер в моем приложении. Мне нужно показать PDF-файлы на каждом фрагменте в представлении pager.is ли способ получить PDF-представление от mupdf? обычно мы называем 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 для каждого фрагмента. Я думаю, что это не правильный путь?

...