Integrar MuPDF Reader en una aplicación

Estoy trabajando en algunas cosas que deben ser capaces de leer PDF en mi aplicación y quiero poner la vista PDF en mi diseño personalizado . Había preferido Android PDF Viewer pero cuando realicé zoomIn , zoomOut toma demasiado tiempo .

Así que actualmente se supone que debo usar MuPDF proyecto de código abierto para integrar en mi proyecto, se basa en JNI y no estoy acostumbrado.

Estoy usando Cygwin para construir la biblioteca para el código nativo. Por lo tanto, no estoy claro con pocas cosas:

  1. Cómo integrar el MuPDF en mi proyecto (según el título de mi pregunta)?

  2. Una vez que tenga éxito para integrarlo entonces cómo puedo poner lector de PDF en mi vista personalizada (en el XML o programmaticaly)?

No sé cómo hacer esto en Windows usando cygwin, porque estoy usando Ubuntu para el desarrollo. Pero creo que el procedimiento debe ser el mismo.

  1. Descargue el archivo mupdf-0.9-source.tar.gz aquí: http://code.google.com/p/mupdf/downloads/list?q=source
  2. Descargue el archivo mupdf-thirdparty.zip
  3. Extraer las fuentes. Por defecto se extraerán a la carpeta: mupdf-0.9 /
  4. Extraiga el archivo mupdf-thirdparty.zip en la carpeta mupdf-0.9 /
  5. Construir el proyecto mupdf-0.9 (Para las ventanas que debe utilizar VS como se declara en los archivos readme)
  6. Luego vaya a la carpeta mupdf-0.9 / android /
  7. Ejecutar ndk-build
  8. Puede obtener los siguientes errores:

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

La solución se explica aquí: mupdf para android: ndk-build problema (error: redefinición de typedef ….) Sin embargo, usted puede simplemente comentar las líneas de la definición de tipos en el archivo /thirdparty/jbig2dec/os_types.h

Después de eso recibirás dos bibliotecas: una estática y otra compartida para tu aplicación android.

 StaticLibrary : libmupdfthirdparty.a SharedLibrary : libmupdf.so 

Esta fue la respuesta a la primera pregunta. También hay una gran guía paso a paso en el archivo android / Readme.txt.

Ahora la respuesta a la segunda pregunta. En la aplicación para Android se puede encontrar el proyecto de prueba. Hay 3 archivos:

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

Simplemente copie los dos últimos archivos en su proyecto. Y ver un ejemplo en MuPDFActivity.java cómo se puede incrustar el diseño mupdf en su actividad. En este archivo se hace como:

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

Así es como logro en mi mac (2012, intel i5):

Paso 1: Obtenga mupdf-1.2-source.zip

Paso 2: Obtener android-ndk-mac-64

Paso 3: descomprima ambos en la nueva carpeta llamada Android-pdf y cambie el nombre de la carpeta unzip a mupdf y android-ndk (puede llamarlos lo que quiera)

Paso 4: abra Terminal y utilice comando: cd hasta que esté en la carpeta android-pdf

Paso 5: cd mupdf que comando: make (tardará unos 40 segundos en ejecutar todos los scripts)

Paso 6: cd android (dentro de mupdf dir.)

Paso 7: abrir el buscador ir a la carpeta Android-pdf que creó que android-ndk arrastre archivo llamar a ndk-build en la línea de comandos de terminal y entrar (básicamente añadiendo una ruta a ndk-build para operar en lib mupdf).

Y después de pocos segundos. Usted debe tener una nueva carpeta dentro de mupdf > android > libs > ... usar eso en su proyecto android.

Cómo utilizar MuPDF con su proyecto Eclipse EXISTENTE:

  1. Copie la carpeta 'jni' de la carpeta / android en su proyecto Eclipse existente.
  2. Copie la carpeta / thirdparty en la carpeta 'jni' de su proyecto.
  3. Copie la carpeta / cbz en la carpeta 'jni' de su proyecto.
  4. Copie la carpeta / draw en la carpeta 'jni' de su proyecto.
  5. Copie la carpeta / fitz en la carpeta 'jni' en su proyecto.
  6. Copie la carpeta / generated en la carpeta 'jni' en su proyecto.
  7. Copie la carpeta / pdf en la carpeta 'jni' en su proyecto.
  8. Copie la carpeta / scripts en la carpeta 'jni' de su proyecto.
  9. Copie la carpeta / xps en la carpeta 'jni' de su proyecto.
  10. Abra 'Android.mk' dentro de la carpeta 'jni'.
  11. Cambio

    MUPDF_ROOT: = ..

a

 MUPDF_ROOT := $(TOP_LOCAL_PATH) 
  1. Guardar 'Android.mk'.
  2. Abra 'Core.mk' dentro de la carpeta 'jni'.
  3. Cambio

    Mi parte

a

 MY_ROOT := $(LOCAL_PATH) 
  1. Cambiar todos los

    ..

En LOCAL_C_INCLUDES para

 $(LOCAL_PATH) 
  1. Guardar 'Core.mk'.
  2. Abra 'ThirdParty.mk' dentro de la carpeta 'jni'.
  3. Cambio

    Mi parte

a

 MY_ROOT := $(LOCAL_PATH) 
  1. Cambiar todos los

    ..

En LOCAL_C_INCLUDES para

 $(LOCAL_PATH) 
  1. Guardar "ThirdParty.mk".
  2. Ahora ejecute 'ndk-build' en el directorio 'jni' de su proyecto.
  3. Copie todo en la carpeta / android / src en la carpeta 'src' en su proyecto.
  4. Copie todo en la carpeta / android / res / drawable en la carpeta 'res / drawable' de su proyecto.
  5. Copie todo en la carpeta / android / res / drawable-ldpi en la carpeta 'res / drawable-ldpi' de su proyecto.
  6. Copie todo en la carpeta / android / res / drawable-mdpi en la carpeta 'res / drawable-mdpi' en su proyecto.
  7. Copie todo en la carpeta / android / res / layout EXCEPT main.xml (porque si está copiando en un proyecto existente entonces debería tener su propio main.xml o equivalente) en la carpeta 'res / layout' de su proyecto.
  8. Copie todo en la carpeta / android / res / values ​​en la carpeta 'res / values' de su proyecto. Si ya tiene un 'strings.xml' en su proyecto existente, copie todo entre las etiquetas en su /android/res/values/strings.xml en strings.xml de su proyecto (pegue entre las etiquetas). Del mismo modo con el 'colors.xml', si ya tienes un 'colors.xml' en tu proyecto existente, copia todo entre las '' etiquetas en tu /android/res/values/strings.xml en strings.xml de tu proyecto (Pegar entre las etiquetas).
  9. Abra el 'AndroidManifest.xml' en el proyecto.
  10. Entre las etiquetas '' pega toda la lista de actividades de

    AndroidManifest.xml dentro de la carpeta / android, debes copiar desde tu copia de trabajo de AndroidManifest.xml dentro de mupdf.

  11. MuPDF ahora en su proyecto existente de Eclipse. Para usarlo, llame a com.artifex.mupdf.ChoosePDFActivity.class en su aplicación. Esta es la clase principal para MuPDF.

  12. Para abrir pdf con un archivo de pre-arreglo:

    Uri uri = Uri.parse ("ruta al archivo pdf");

    Intención intention = new Intent (contexto, MuPDFActivity.class);

    Intent.setAction (Intent.ACTION_VIEW);

    Intent.setData (uri);

    Context.startActivity (intención);

Espero que esto ayude 🙂

Compruebe este proyecto eBookDroid

EBookDroid es un visualizador de documentos de código abierto (GPL) para Android basado en la base de código VuDroid.

Soporta el archivo en los siguientes formatos:

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

Tengo view pager en mi aplicación. Necesito mostrar archivos pdf en cada fragmento en vista pager.is hay manera de obtener una vista de pdf desde mupdf ? Normalmente llamamos mupdf como a continuación

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

Así que si uso mupdf para mi aplicación tengo que llamar a MuPDFActivity en cada fragmento. Creo que no es una manera correcta?

La respuesta dada por star18bit casi lo resume, pero incluso después de que me enfrenté a un montón de problemas.

Al igual que el comando make no funcionó para mí y tuve que construirlo con Visual Studio. Así que enumeré todos los softwares pre-req. Como ANT. También necesitamos agregar las carpetas de la carpeta sdk y las carpetas de tools platform-tools en PATH.

Además, tuve que hacer los cambios en el archivo Core2.mk , los mismos en Core.mk No puedo dar toda la información aquí, porque es mucho, por lo que me refiero a este enlace para obtener información completa:

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

  • generar PDF desde Android usando PrintedPdfDocument y View.draw
  • Uso de la clase PdfDocument para la versión antigua de Android
  • IText crear un documento con tamaños de página desiguales
  • No se carga el PDF de Android en el navegador y en WebView
  • Android - Cargar PDF / PDF Viewer
  • ¿Cómo puedo leer libros PDF con la animación de curl de página en android?
  • Detectar de forma fiable la compatibilidad con PDF en un dispositivo Android
  • Convertir JPG a PDF
  • Android descargar pdf de url luego abrirlo con un lector de pdf
  • Los teléfonos Android no abren el flujo de archivos PDF después de la publicación en ASP.Net
  • Cómo hacer anotaciones como destacar, tachar, subrayar, dibujar, añadir texto, etc en android para un visor de pdf?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.