Подтвердить что ты не робот

Интеграция MuPDF Reader в приложении

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

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

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

  • как интегрировать MuPDF в моем проекте (согласно моему заголовку вопроса)?

  • Как только мне удастся его интегрировать, как я могу поместить PDF-Reader в свой пользовательский вид (в XML или программном)?

4b9b3361

Ответ 1

Я не знаю, как это сделать в 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 (для окон вы должны использовать VS, как он объявлен в файлах readme)
  • Затем перейдите в папку 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 для android: проблема ndk-build (ошибка: переопределение typedef....) Однако вы можете просто прокомментировать строки определения типов в файле /thirdparty/jbig 2dec/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);

Ответ 2

Некоторые файлы исходного кода для программы просмотра 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 (мертвая ссылка)

Ответ 3

Это то, как я достигаю на своем mac (2012, intel i5):

Шаг 1: Получите mupdf-1.2-source.zip

Шаг 2: Получите android-ndk-mac-64

Шаг 3: разархивируйте оба из них в новом вызове папки Android-pdf и переименуйте папку unzip в 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.)

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

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

  • Скопируйте папку "jni" из папки /android в существующий проект Eclipse.
  • Скопируйте папку /thirdparty в папку "jni" в вашем проекте.
  • Скопируйте папку /cbz в папку "jni" в вашем проекте.
  • Скопируйте папку /draw в папку "jni" в вашем проекте.
  • Скопируйте папку /fitz в папку "jni" в вашем проекте.
  • Скопируйте/сгенерированную папку в папку "jni" в вашем проекте.
  • Скопируйте папку /pdf в папку "jni" в вашем проекте.
  • Скопируйте папку /scripts в папку "jni" в вашем проекте.
  • Скопируйте папку /xps в папку "jni" в вашем проекте.
  • Откройте "Android.mk" в папке "jni" .
  • Изменить

    MUPDF_ROOT: =..

к

MUPDF_ROOT := $(TOP_LOCAL_PATH)
  • Сохранить "Android.mk".
  • Откройте "Core.mk" внутри папки "jni" .
  • Изменить

    MY_ROOT: =../..

to

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

    ..

в LOCAL_C_INCLUDES до

$(LOCAL_PATH)
  • Сохранить 'Core.mk'.
  • Откройте "ThirdParty.mk" внутри папки "jni" .
  • Изменить

    MY_ROOT: =../..

к

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

    ..

в LOCAL_C_INCLUDES для

$(LOCAL_PATH)
  • Сохранить 'ThirdParty.mk'.
  • Теперь выполните "ndk-build" в каталоге проекта "jni" .
  • Скопируйте все в папку /android/src в папку 'src' в вашем проекте.
  • Скопируйте все в папку /android/res/drawable в папку "res/drawable" в вашем проекте.
  • Скопируйте все в папку /android/res/drawable -ldpi в папку "res/drawable-ldpi" в вашем проекте.
  • Скопируйте все в папку /android/res/drawable -mdpi в папку "res/drawable-mdpi" в вашем проекте.
  • Скопируйте все в папку /android/res/layout EXCEPT main.xml(потому что если вы копируете существующий проект, у вас должен быть свой собственный main.xml или эквивалент) в папку "res/layout" в ваш проект.
  • Скопируйте все в папку /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(вставить между "тегами" ).
  • Откройте "AndroidManifest.xml" в проекте.
  • Между тегами '' вставьте весь список действий из

    AndroidManifest.xml внутри папки /android, Скопировать из рабочей копии из AndroidManifest.xml внутри mupdf.

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

  • Чтобы открыть pdf с файлом pre-fix:

    Uri uri = Uri.parse( "путь к файлу PDF" );

    Intent intent = новый Intent (контекст, MuPDFActivity.class);

    intent.setAction(Intent.ACTION_VIEW);

    intent.setData(URI);

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

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

Ответ 4

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

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

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

PDF
DjVu
XPS (OpenXPS)
comics books (cbz,cbr)

Ответ 5

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

Ответ 6

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

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

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

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