Интеграция MuPDF Reader в приложении
Я работаю над некоторыми материалами, которые должны иметь возможность читать PDF в моем приложении, и я хочу поместить просмотр PDF в свой собственный макет. Я предпочитал Android PDF Viewer, но когда я выполнял zoomIn, zoomOut, требуется слишком много времени.
Поэтому в настоящее время я должен использовать MuPDF проект с открытым исходным кодом для интеграции в мой проект, основанный на JNI, и я не привык к нему.
Я использую Cygwin для создания библиотеки для собственного кода. Поэтому я не понимаю, с какими-то вещами:
-
как интегрировать MuPDF в моем проекте (согласно моему заголовку вопроса)?
-
Как только мне удастся его интегрировать, как я могу поместить PDF-Reader в свой пользовательский вид (в XML или программном)?
Ответы
Ответ 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