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

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

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

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

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

  2. как только мне удастся его интегрировать, тогда как я могу поместить PDF-ридер в свое собственное представление (в 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 (для окон вы должны использовать 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); 

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

    Это то, как я достигаю на своем 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 androidmupdf ).

    Шаг 7: open finder перейдите в папку Android-pdf которую вы создали, чем android-ndk перетаскивания android-ndk перетащите файл ndk-build в командную строку терминала и введите (в основном добавив путь к ndk-build для работы с mupdf lib.)

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

    Как использовать MuPDF с вашим EXISTING проектом 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. Измените все

      ..

    в 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 EXCEPT 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 в своем приложении. Это основной class для MuPDF.

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

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

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

      intent.setAction (Intent.ACTION_VIEW);

      intent.setData (URI);

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

    Надеюсь эта помощь 🙂

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

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

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

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

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

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

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

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

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

    Interesting Posts

    Что такое C-указатель, если не адрес памяти?

    Crypt32.dll нарушен для Virtualbox с патча во вторник 9-дек-2014?

    Почему диапазон байтов от -128 до 127 в Java?

    Существуют ли какие-либо допустимые варианты использования новых и удаленных, необработанных указателей или массивов c-стиля с современным C ++?

    Почему удаленный файл не удаляется с жесткого диска?

    Сканеры Google интерпретируют Javascript? Что делать, если я загружаю страницу через AJAX?

    Преобразование данных JSON в объект Java

    Как очистить кеш пакетов NuGet с помощью командной строки?

    Получение «NoSuchMethodError: org.hamcrest.Matcher.describeMismatch» при запуске теста в IntelliJ 10.5

    Преобразовать NTFS в EXT3?

    Изменения ftype игнорируются. Где Windows извлекает «неправильное» значение? Как я могу применить свои изменения?

    Какие заголовки в стандартной библиотеке C ++ гарантированно include другой заголовок?

    Тихая установка пакета MSI

    Как поддерживать кодировку UTF-8 в Eclipse

    В этом контексте поддерживаются только примитивные типы или типы перечислений

    Давайте будем гением компьютера.