web-dev-qa-db-fra.com

Intégrer MuPDF Reader dans une application

Je travaille sur des trucs qui devraient pouvoir lire PDF dans mon application et je veux mettre PDF voir dans mon mise en page personnalisée. J'avais préféré Android PDF Viewer mais quand j'ai effectué zoomIn, zoomOut cela prend trop temps.

Donc actuellement, je suis censé utiliser MuPDF projet open source pour l'intégrer dans mon projet, il est basé sur JNI et je ne suis pas utilisé à elle.

J'utilise Cygwin pour construire la bibliothèque de 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, comment puis-je mettre PDF dans mon vue personnalisée (dans le XML ou par programmation)?

45
dharam

Je ne sais pas comment faire cela dans 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. Générez le projet mupdf-0.9 (pour les fenêtres, vous devez utiliser VS tel qu'il est déclaré dans les fichiers readme)
  6. Allez ensuite dans le dossier mupdf-0.9/Android /
  7. Exécutez 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 construction de ndk (erreur: redéfinition de typedef ....) Cependant, vous pouvez simplement commenter les lignes de la définition des types dans le fichier/tierce partie /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 sur la façon dont 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);
47
Yury
15
Rizvan

Voici comment je réalise sur mon mac (2012, intel i5):

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

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

Étape 3: décompressez-les tous les deux dans un nouvel appel de dossier Android-pdf et renommer le dossier de décompression en mupdf et Android-ndk (vous pouvez les appeler comme bon vous semble)

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

Étape 5: commande cd mupdf than: make (il faudra environ 40 secondes pour exécuter tous les scripts)

Étape 6: cd Android (dans le répertoire mupdf)

Étape 7: ouvrez le Finder, allez dans le dossier Android-pdf que vous avez créé que Android-ndk faites glisser l'appel de fichier ndk-build dans la ligne de commande du terminal et entrez (en gros, ajoutez un chemin vers ndk-build pour fonctionner sur mupdf lib.)

et après quelques secondes. vous devriez avoir un nouveau dossier dans 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

    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 le

    ..

dans LOCAL_C_INCLUDES à

$(LOCAL_PATH)
  1. Enregistrez "ThirdParty.mk".
  2. Maintenant, exécutez '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 (car 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 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 '' dans votre /Android/res/values/strings.xml dans le strings.xml de votre projet (collez entre les balises ''). De même avec le 'colours.xml', si vous avez déjà un 'colours.xml' dans votre projet existant, copiez tout ce qui se trouve entre les balises '' dans votre /Android/res/values/strings.xml dans les strings.xml de votre projet (coller entre les balises '').
  9. Ouvrez le 'AndroidManifest.xml' dans le projet.
  10. Entre les balises '', collez toute la liste des activités de

    AndroidManifest.xml dans le dossier/Android, Vous devez copier à partir de votre copie de travail d'AndroidManifest.xml dans mupdf.

  11. MuPDF est maintenant dans votre projet Eclipse existant. Pour l'utiliser, appelez com.artifex.mupdf.ChoosePDFActivity.class dans votre candidature. Il s'agit de la classe principale pour MuPDF.

  12. Pour ouvrir un fichier PDF avec un fichier préfixé:

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

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

    intent.setAction (Intent.ACTION_VIEW);

    intent.setData (uri);

    context.startActivity (intention);

J'espère que cette aide :)

7
star18bit

Vérifiez ce projet eBookDroid

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

Pris en charge le fichier dans les formats suivants:

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

J'ai un téléavertisseur dans mon application. J'ai besoin d'afficher des fichiers pdf sur chaque fragment dans la vue pager.y a-t-il un moyen d'obtenir une vue pdf à partir 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 une bonne façon?

0
asliyanage

La réponse donnée par star18bit Résume à peu près, mais même en suivant 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 à l'aide de Visual Studio. J'ai donc répertorié tous les logiciels pré-requis. Comme ANT. Nous devons également ajouter les dossiers tools et platform-tools Du dossier sdk dans PATH.

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

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

0
nullpointer