Intégrer le lecteur MuPDF dans une application

je travaille sur quelques trucs qui devraient pouvoir lire PDF dans mon application et je veux mettre PDF view dans mon custom layout . J'avais préféré Android PDF Viewer mais quand j'ai exécuté zoomIn , zoomOut il prend trop de temps time .

donc actuellement je suis censé utiliser MuPDF projet open source pour s'intégrer dans mon projet, il est basé sur JNI et je ne suis pas habitué.

j'utilise Cygwin pour construire la bibliothèque pour le code natif. Par conséquent, je ne suis pas clair avec peu de choses:

  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 PDF dans mon vue personnalisée (dans le XML ou programmaticaly)?

46
demandé sur bluish 2011-12-14 10:53:20

6 réponses

Je ne sais pas comment faire cela dans Windows en utilisant cygwin, parce que 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, elles seront extraits 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. puis 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é ici: mupdf pour android: ndk-problème de construction (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: l'une statique et une pour votre application android.

StaticLibrary  : libmupdfthirdparty.a
SharedLibrary  : libmupdf.so

C'était la réponse à la première question. Il y a aussi un grand guide étape par étape dans le android / Readme.fichier 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

copiez simplement les deux derniers fichiers de votre projet. Et voir un exemple dans MuPDFActivity.java comment intégrer la mise en page mupdf dans votre activité. Dans ce fichier il est 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);
46
répondu Yury 2017-05-23 12:34:14

C'est Comment j'ai réaliser sur mon mac (2012, intel i5):

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

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

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

Étape 4: Ouverture du Terminal et utilisation commande: cd jusqu'à ce que vous soyez dans android-pdf dossier

Étape 5 : cd mupdf que le commandement: make (de 40 sec. pour exécuter tous les scripts)

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

Étape 7: ouvrir finder aller au dossier Android-pdf que vous avez créé que android-ndk l'appel de fichier de glisser ndk-build dans la ligne de commande de terminal et entrer (essentiellement en ajoutant un chemin à ndk-construire à opérez sur mupdf lib.)

et après quelques secondes. vous devriez avoir un nouveau dossier à l'intérieur mupdf > android > libs > ... utiliser que 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" dans 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 / generated dans le dossier' jni ' de votre projet.
  7. Copiez le dossier / pdf dans le dossier " jni " de votre projet.
  8. Copy le dossier /scripts dans le "jni' dossier de votre projet.
  9. Copiez le dossier /xps dans le dossier' jni ' de votre projet.
  10. Open ' Android.mk 'dans le dossier 'jni'.
  11. Changement

    MUPDF_ROOT:= ..

à

MUPDF_ROOT := $(TOP_LOCAL_PATH)
  1. Enregistrer " Android.mk'.
  2. Ouverte " Noyau.mk' à l'intérieur le "jni' dossier.
  3. Changement

    MY_ROOT:=../..

à

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

    ..

in LOCAL_C_INCLUDES à

$(LOCAL_PATH)
  1. Enregistrer "Noyau.mk'.
  2. Open ' Thirdpartty.mk 'dans le dossier 'jni'.
  3. Changement

    MY_ROOT:=../..

à

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

    ..

in LOCAL_C_INCLUS to

$(LOCAL_PATH)
  1. Sauver " Les Tiers.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 ce qui se trouve dans le dossier /android/res/drawable dans le dossier 'res/drawable' de votre projet.
  5. copiez tout dans le dossier/android/res / drawable-ldpi dossier' res/drawable-ldpi ' dans 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, alors vous devriez déjà avoir votre propre main.xml ou équivalent) dans le dossier' res/layout ' de votre projet.
  8. copier tout dans le /android/res/valeurs de dossier dans la "res/valeurs" dossier de votre projet. Si vous avez déjà un 'cordes.xml' dans votre projet existant, copiez tout ce qui se trouve entre les " tags dans votre /android/res/values/strings.xml dans les chaînes de votre projet.xml (coller entre les balises). De la même façon avec les couleurs.xml', si vous avez déjà un 'couleurs.xml' dans votre projet existant, copiez tout ce qui se trouve entre les " tags dans votre /android/res/values/strings.xml dans les chaînes de votre projet.xml (coller entre balise.)
  9. ouvrez le ' AndroidManifest.xml dans le projet.
  10. entre les " tags coller de l'ensemble de la liste des activités de

    AndroidManifest.xml dans le dossier /android, vous devez copier à partir de votre copie de travail de AndroidManifest.xml à l'intérieur de mupdf.

  11. MuPDF maintenant dans votre projet Eclipse existant. Pour l'utiliser, appeler com.artifex.mupdf.ChoosePDFActivity.class dans votre demande. C'est la classe principale pour le MuPDF.

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

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

    intention intention = nouvelle intention (context, MuPDFActivity.classe);

    intention.setAction (intention.ACTION_VIEW);

    intention.setData (uri);

    contexte.startActivity(intent);

Espérons que cela aide :)

7
répondu star18bit 2013-07-25 01:06:11

voir ce projet eBookDroid

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

supporte le fichier dans les formats suivants:

PDF
DjVu
XPS (OpenXPS)
comics books (cbz,cbr)
5
répondu ingsaurabh 2011-12-14 08:34:07

j'ai le pager de vue dans ma demande. J'ai besoin de montrer des fichiers pdf sur chaque fragment dans le pager de vue.y a-t-il un 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 l'appeler MuPDFActivity sur chaque fragment.Je pense que ce n'est pas une manière correcte?

0
répondu asliyanage 2014-10-06 05:00:22

la réponse donnée par star18bit résume à peu près tout, mais même la suite que j'ai fait face à beaucoup de problèmes.

comme la commande make n'a pas fonctionné pour moi et j'ai dû la construire en utilisant Visual Studio. Donc j'ai listé tous les logiciels pré-req. Comme la FOURMI. Nous devons aussi ajouter les dossiers sdk tools et platform-tools dans le chemin.

aussi, j'ai dû faire les changements dans Core2.mk fichier, les mêmes dans Core.mk . Je ne peux pas donnez toutes les informations ici, car c'est beaucoup, donc je renvoyant ce lien pour des informations complètes:

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

0
répondu nullpointer 2015-01-12 06:26:52