45 votes

Intégrer MuPDF Reader dans une application

Je travaille sur des trucs qui devraient pouvoir être lus. PDF dans mon application et je veux mettre la vue PDF dans mon application. mise en page personnalisée . J'avais préféré Visionneuse de PDF Android mais quand j'ai exécuté zoomIn , zoomOut il en faut trop temps .

Donc, actuellement, je suis censé utiliser MuPDF projet open source à intégrer dans mon projet, il est basé sur JNI et je ne suis pas habitué à ça.

J'utilise Cygwin pour construire la bibliothèque pour le code natif. Par conséquent, certaines choses ne sont pas claires pour moi :

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

  2. une fois que je réussirai à l'intégrer alors comment puis-je mettre le lecteur de PDF dans mon vue personnalisée (dans le XML ou par programme) ?

47voto

Yury Points 10837

Je ne sais pas comment faire sous 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écharger le fichier mupdf-thirdparty.zip
  3. Extraire les sources. Par défaut elles seront extraites dans le dossier : mupdf-0.9/
  4. Extraire le fichier mupdf-thirdparty.zip dans le dossier mupdf-0.9/.
  5. Construire le projet mupdf-0.9 (Pour Windows, vous devez utiliser 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 :

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 solution est expliquée ici : mupdf pour Android : problème de 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 le projet de test. Il y a 3 fichiers :

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

Il suffit de copier les deux derniers fichiers dans 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 passe comme suit :

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

15voto

7voto

star18bit Points 1004

C'est ce que je réalise sur mon mac (2012, intel i5) :

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

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

Étape 3 : dézipper les deux dans un nouveau dossier d'appel. Android-pdf et renommez le dossier unzip en mupdf et android-ndk (vous pouvez les appeler comme vous le souhaitez)

Etape 4 : ouvrir le Terminal et utiliser la commande : cd jusqu'à ce que vous soyez dans android-pdf dossier

Étape 5 : cd mupdf que la commande : make (cela prendra environ 40 secondes pour exécuter tous les scripts)

Étape 6 : cd android (dans mupdf dir.)

Étape 7 : ouvrez le Finder, allez dans le dossier Android-pdf que vous avez créé que android-ndk appel de fichier par glisser-déposer ndk-build dans la ligne de commande du terminal et entrez (il s'agit essentiellement d'ajouter un chemin à ndk-build pour opérer sur la librairie mupdf).

et après quelques secondes, vous devriez avoir un nouveau dossier à l'intérieur. mupdf > android > libs > ... Utilisez-le dans votre projet Android.

Comment utiliser MuPDF avec votre projet Eclipse EXISTANT :

  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 /généré 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

    MA_ROOT := ../

à

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

    ..

dans LOCAL_C_INCLUDES à

$(LOCAL_PATH)
  1. Enregistrez 'Core.mk'.
  2. Ouvrez 'ThirdParty.mk' dans le dossier 'jni'.
  3. Changement

    MA_ROOT := ../

à

MY_ROOT := $(LOCAL_PATH)
  1. Changement tous le site

    ..

sur 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 ce qui se trouve dans le dossier /Android/src dans le dossier 'src' de votre projet.

  4. Copiez tout ce qui se trouve dans le dossier /Android/res/drawable dans le dossier 'res/drawable' de votre projet.

  5. Copiez tout ce qui se trouve dans le dossier /Android/res/drawable-ldpi dans le dossier 'res/drawable-ldpi' de votre projet.

  6. Copiez tout ce qui se trouve dans le dossier /Android/res/drawable-mdpi dans le dossier 'res/drawable-mdpi' de votre projet.

  7. Copiez tout ce qui se trouve 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 main.xml ou équivalent) dans le dossier 'res/layout' de votre projet.

  8. Copiez tout ce qui se trouve dans le dossier /Android/res/values dans le dossier 'res/values' de votre projet. Si vous avez déjà un 'strings.xml' dans votre projet existant, copiez tout ce qui se trouve entre les balises '' de votre /Android/res/values/strings.xml dans le strings.xml de votre projet (collez entre les balises ''). De même avec le fichier 'colors.xml', si vous avez déjà un 'colors.xml' dans votre projet existant, copiez tout ce qui se trouve entre les balises '' de votre /Android/res/values/strings.xml dans le strings.xml de votre projet (collez entre les balises '').

  9. Ouvrez le fichier 'AndroidManifest.xml' dans le projet.

  10. Entre les balises '', collez toutes les listes d'activités de la section

    AndroidManifest.xml dans le dossier /Android, Vous devez copier depuis votre copie de travail de AndroidManifest.xml dans mupdf.

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

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

    Uri uri = Uri.parse("chemin vers le fichier pdf") ;

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

    intent.setAction(Intent.ACTION_VIEW) ;

    intent.setData(uri) ;

    context.startActivity(intent) ;

J'espère que cela vous aidera :)

5voto

ingsaurabh Points 10892

Vérifiez ce projet eBookDroid

EBookDroid est une visionneuse de documents open source (sous licence GPL) pour Android basée sur la base de code VuDroid.

Le fichier est pris en charge dans les formats suivants :

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

0voto

asliyanage Points 91

J'ai un pager de visualisation dans mon application. J'ai besoin d'afficher des fichiers pdf sur chaque fragment dans le visualiseur. mupdf ? normalement on appelle mupdf comme suit

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 une méthode correcte ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X