Intégrer MuPDF Reader dans une application

Je travaille sur des éléments qui devraient être capables de lire des fichiers PDF dans mon application et je souhaite afficher la vue PDF dans ma présentation personnalisée . J’avais préféré Android PDF Viewer mais quand j’ai effectué un zoomIn , zoomOut cela prend trop de temps .

Donc, actuellement, je suis censé utiliser le projet open source MuPDF pour intégrer mon projet, il est basé sur JNI et je n’y suis pas habitué.

J’utilise Cygwin pour construire la bibliothèque pour le code natif. Je ne suis donc pas certain avec peu de choses:

  1. comment intégrer le MuPDF dans mon projet (selon le titre de ma question)?

  2. une fois que j’aurai réussi à l’intégrer, comment puis-je mettre le lecteur PDF dans ma vue personnalisée (en XML ou en programmation)?

Je ne sais pas comment faire cela avec Windows en utilisant cygwin, car j’utilise Ubuntu pour le développement. Mais je pense que la procédure devrait être la même.

  1. Téléchargez le fichier mupdf-0.9-source.tar.gz ici: http://code.google.com/p/mupdf/downloads/list?q=source
  2. Téléchargez le fichier mupdf-thirdparty.zip
  3. Extraire les sources Par défaut, ils seront extraits dans le dossier: mupdf-0.9 /
  4. Extrayez le fichier mupdf-thirdparty.zip dans le dossier mupdf-0.9 /
  5. Construisez le projet mupdf-0.9 (pour Windows, utilisez VS comme il est déclaré dans les fichiers readme)
  6. Ensuite, allez dans le dossier mupdf-0.9 / android /
  7. Exécuter ndk-build
  8. Vous pouvez obtenir les erreurs suivantes:

Comstack 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 solution est expliquée ici: mupdf pour Android: problème ndk-build (erreur: redéfinition de typedef ....) Cependant, vous pouvez simplement commenter les lignes de la définition des types dans le fichier /thirdparty/jbig2dec/os_types.h

Après cela, vous recevrez deux bibliothèques: une statique et une partagée pour votre application Android.

 StaticLibrary : libmupdfthirdparty.a SharedLibrary : libmupdf.so 

C'était la réponse à la première question. Il existe également un excellent guide étape par étape dans le fichier android / Readme.txt.

Maintenant, la réponse à la deuxième question. Dans l'application pour Android, vous pouvez trouver un projet de test. Il y a 3 fichiers:

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

Copiez simplement les deux derniers fichiers de votre projet. Et voyez un exemple dans MuPDFActivity.java comment vous pouvez intégrer la mise en page mupdf dans votre activité. Dans ce fichier, cela se fait comme:

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

Voici comment j’obtiens sur mon mac (2012, Intel i5):

Étape 1: Obtenir mupdf-1.2-source.zip

Étape 2: Obtenir android-ndk-mac-64

Étape 3: décompressez les deux dans le nouveau dossier appelez Android-pdf et renommez le dossier décompressé en mupdf et android-ndk (vous pouvez les appeler comme vous voudrez)

Étape 4: ouvrez Terminal et utilisez la commande: cd jusqu’à ce que vous soyez dans le dossier android-pdf

Etape 5: cd mupdf à la commande: make (il faudra environ 40 secondes pour exécuter tous les scripts)

Étape 6: cd android (dans le mupdf )

Etape 7: ouvrez finder allez dans le dossier Android-pdf que vous avez créé que android-ndk faites glisser le fichier appelez ndk-build en ligne de commande du terminal et entrez (en ajoutant essentiellement un chemin vers ndk-build pour opérer sur mupdf lib.)

et après quelques secondes. vous devriez avoir un nouveau dossier dans mupdf > android > libs > ... utilisez cela dans votre projet Android.

Comment utiliser MuPDF avec votre projet EXISTING Eclipse:

  1. Copiez le dossier “jni” du dossier / android dans votre projet Eclipse existant.
  2. Copiez le dossier / thirdparty dans le dossier ‘jni’ de votre projet.
  3. Copiez le dossier / cbz dans le dossier “jni” de votre projet.
  4. Copiez le dossier / draw dans le dossier “jni” de votre projet.
  5. Copiez le dossier / fitz dans le dossier ‘jni’ de votre projet.
  6. Copiez le dossier / created dans le dossier ‘jni’ de votre projet.
  7. Copiez le dossier / pdf dans le dossier “jni” de votre projet.
  8. Copiez le dossier / scripts dans le dossier “jni” de votre projet.
  9. Copiez le dossier / xps dans le dossier ‘jni’ de votre projet.
  10. Ouvrez ‘Android.mk’ dans le dossier ‘jni’.
  11. Changement

    MUPDF_ROOT: = ..

à

 MUPDF_ROOT := $(TOP_LOCAL_PATH) 
  1. Enregistrez ‘Android.mk’.
  2. Ouvrez ‘Core.mk’ dans le dossier ‘jni’.
  3. Changement

    MY_ROOT: = ../ ..

à

 MY_ROOT := $(LOCAL_PATH) 
  1. Changer tous les

    ..

dans LOCAL_C_INCLUDES à

 $(LOCAL_PATH) 
  1. Enregistrez ‘Core.mk’.
  2. Ouvrez “ThirdParty.mk” dans le dossier “jni”.
  3. Changement

    MY_ROOT: = ../ ..

à

 MY_ROOT := $(LOCAL_PATH) 
  1. Changer tous les

    ..

dans LOCAL_C_INCLUDES à

 $(LOCAL_PATH) 
  1. Enregistrez ‘ThirdParty.mk’.
  2. Exécutez maintenant “ndk-build” dans le répertoire “jni” de votre projet.
  3. Copiez tout dans le dossier / android / src dans le dossier ‘src’ de votre projet.
  4. Copiez tout dans le dossier / android / res / drawable dans le dossier ‘res / drawable’ de votre projet.
  5. Copiez tout dans le dossier / android / res / drawable-ldpi dans le dossier ‘res / drawable-ldpi’ de votre projet.
  6. Copiez tout dans le dossier / android / res / drawable-mdpi dans le dossier ‘res / drawable-mdpi’ de votre projet.
  7. Copiez tout dans le dossier / android / res / layout SAUF main.xml (parce que si vous copiez dans un projet existant, vous devriez déjà avoir votre propre fichier main.xml ou équivalent) dans le dossier ‘res / layout’ de votre projet.
  8. Tout copier dans le dossier / android / res / values ​​dans le dossier ‘res / values’ de votre projet. Si vous avez déjà un ‘ssortingngs.xml’ dans votre projet existant, copiez tout ce qui se trouve entre les ” balises de votre /android/res/values/ssortingngs.xml dans ssortingngs.xml de votre projet (collez entre les balises ”). De même, avec le fichier «colors.xml», si vous avez déjà un fichier «colors.xml» dans votre projet existant, copiez tout ce qui se trouve entre les balises «/android/res/values/ssortingngs.xml» dans le fichier ssortingngs.xml de votre projet. (coller entre les balises ”).
  9. Ouvrez le fichier ‘AndroidManifest.xml’ dans le projet.
  10. Entre les balises ” collent toute la liste des activités de

    AndroidManifest.xml dans le dossier / android, Vous devez copier depuis votre copie de travail de AndroidManifest.xml à l’intérieur de mupdf.

  11. MuPDF maintenant dans votre projet Eclipse existant. Pour l’utiliser, appelez com.artifex.mupdf.ChoosePDFActivity.class dans votre application. C’est la classe principale pour MuPDF.

  12. Pour ouvrir le pdf avec un fichier pré-correctif:

    Uri uri = Uri.parse (“chemin du fichier pdf”);

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

    intent.setAction (Intent.ACTION_VIEW);

    intent.setData (uri);

    context.startActivity (intention);

J’espère que cette aide 🙂

Consultez ce projet eBookDroid

EBookDroid est un visualiseur de documents open source (GPL) pour Android basé sur la base de code VuDroid.

Supporté le fichier dans les formats suivants:

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

J’ai un pager de vue dans mon application. J’ai besoin de montrer des fichiers pdf sur chaque fragment dans la vue pager.is y at-il moyen d’obtenir une vue pdf de mupdf ? normalement nous appelons mupdf comme ci-dessous

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

Donc, si j’utilise mupdf pour mon application, je dois appeler MuPDFActivity sur chaque fragment. Je pense que ce n’est pas la bonne façon?

La réponse donnée par star18bit résume bien la situation, mais même après, j’ai rencontré beaucoup de problèmes.

Comme la commande make ne fonctionnait pas pour moi et que je devais la construire avec Visual Studio. J’ai donc répertorié tous les logiciels pré-requirejs. Comme ANT. Nous devons également append les tools et les dossiers de platform-tools du dossier sdk dans PATH.

De plus, j’ai dû faire les modifications dans le fichier Core2.mk , les mêmes dans Core.mk Je ne peux pas donner toutes les informations ici, car il y en a beaucoup, alors je renvoie ce lien pour des informations complètes:

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