Aller au contenu

Démarrer intent pour lire un PDF depuis une URL


bioslord

Recommended Posts

Bonjour :) je désespérément un moyen d'ouvrir un reader PDF (pas forcement celui de adobe) mais depuis une URL, et non depuis la carte SD, du coup File est inutile...

J'ai essayé de faire quelque chose comme ça :

           Uri uri = Uri.parse("http://masuperurl.vers/unfichier.pdf");
    Intent intent = new Intent(Intent.ACTION_VIEW);
    File file = new File( uri  );
    intent.setDataAndType( Uri.fromFile( file ), "application/pdf" );
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

sauf que Adobe Reader me dit que le chemin du fichier est invalide :/ il ne supporterais pas les URL ?

Et en faisant comme ceci, ça plante:

    Uri path = Uri.parse("http://masuperurl.vers/unfichier.pdf");
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType( path,  "application/pdf" );
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Ce qui est plutôt logique enfaîte.

J'ai essayé avec quelque pdf viewer sur le market, et tous font des IO error... Ya pas moyens donc ? Il faut impérativement télécharger le PDF pour le lire ?

Si quelqu'un connait comment résoudre mon problème :D

Merci.

EDIT: Heu... Le sujet à été double posté. Si un modo est par là, merci de supprimer l'autre, et désolé :|

Modifié par bioslord
Lien vers le commentaire
Partager sur d’autres sites

Bon apparemment , je confirme. Aucun lecteur PDF ne peux ouvrir un PDF depuis une URL :(

Mais ne voulais pas abandonné, j'ai tout simplement utilisé le lecteur "en ligne" de Google que j'ai intégré avec une WebView. Le résultat est assez propre et en plus c'est dispo sur tout les appareil Android.

Pour info si ça intéresse il suffit de construire l'url en partant de celle de Google : http://docs.google.com/viewer?url= + URLduPDF

EDIT: Au passage , ya toujours un double post ... Je suis désolé ..

Modifié par bioslord
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir bioslord,

Je suis en train de développer une application, dans laquelle je tente d'ouvrir des pdf stockés localement. J'utilise un intent en spécifiant que je veux ouvrir un fichier de type pdf, cependant dés l'ouverture de l'application j'ai le message "Le chemin du fichier est incorrect". J'utilise un File pour passer le chemin du fichier, surement de la mauvaise manière.

Sais tu quelle est la bonne méthode pour ce genre d'action à mettre en place ?

Voici le code en question :

       Intent intent = new Intent();
   	intent.setAction(android.content.Intent.ACTION_VIEW); 
       File file = new File("assets/test.pdf");
       intent.setDataAndType(Uri.fromFile(file), "application/pdf");
       startActivity(intent);

Merci d'avance de m'avoir lu.

Lien vers le commentaire
Partager sur d’autres sites

Hello massbath,

Je pense que le chemin de ton fichier n'est pas complaît (assest/test.pdf).

Voila, comment je fais quand le PDF est en local:

File file = new File("/sdcard/test.pdf");

               if (file.exists()) {
                   Uri path = Uri.fromFile(file);
                   Intent intent = new Intent(Intent.ACTION_VIEW);
                   intent.setDataAndType(path, "application/pdf");
                   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

                   try {
                       startActivity(intent);
                   } 
                   catch (ActivityNotFoundException e) {
                       Toast.makeText(OpenPdf.this, "Aucun application disponible pour lire les PDF", Toast.LENGTH_SHORT).show();
                   }

Le chemin du fichier commence par un /

En espérant que ça t'aide :)

Modifié par bioslord
Lien vers le commentaire
Partager sur d’autres sites

Si ton PDF est dans les assets de ton application (cad intégré en tant que ressources), il ne sera pas accessible via le filesystem au travers d'une URL de type "file:". Il faudrait d'abord que tu le copies de tes ressources vers le filesystem, pour qu'une appli externe puisse y accéder

Lien vers le commentaire
Partager sur d’autres sites

Non, je n'ai pas d'exemples sous la main. Mais rien de bien compliqué

Il te suffit de récupérer le contenu de ton PDF depuis les ressources de ton appli (tu peux regarder les exemples du SDK, plus particulièrement API Demos pour ce faire), et stocker ensuite ce contenu dans un fichier dans un répertoire temporaire, et filer l'URI de ce fichier via ton Intent

Lien vers le commentaire
Partager sur d’autres sites

Salut ,

Après avoir parcouru l'API demos de google, je me rend compte que l'on peut effectivement récupérer le contenu de certains fichiers. Sauf que pour mon cas je ne veux pas récupéré le contenu je veux juste ouvrir des fichiers pdf qui seront présents dans mon application au niveau des ressources ...

J'ai fait pas mal de recherche mais j'ai l'impression de tourner en rond ...

Lien vers le commentaire
Partager sur d’autres sites

Tant que tu ne comprendras pas que ton PDF, étant intégré dans ton application en tant que ressources, n'est pas accessible via une URI de type file:, tu ne pourras pas avancer.

Pour que tu puisses ouvrir ton PDF avec une autre appli, il faut donc que ce PDF soit quelque part dans le filesystem, à un endroit accessible par d'autres applis que la tienne; pour cela, il faut donc qu'à un moment ou un autre, tu copies ce PDF de tes ressources privées vers un endroit public dans le filesystem...

Lien vers le commentaire
Partager sur d’autres sites

OK donc nous sommes obligé de parcourir tout un fichier, stocker son contenu, pour ensuite créer un fichier dans le filesystem, l'ouvrir et coller le contenu, j'ai compris

Je suis désolé de paraitre un peu nié, mais je suis surtout surpris qu'il n'existe pas de méthode plus intuitif pour ce genre de traitement.

Je te remercie de m'avoir répondu.

Lien vers le commentaire
Partager sur d’autres sites

Bon apparemment , je confirme. Aucun lecteur PDF ne peux ouvrir un PDF depuis une URL :(

Mais ne voulais pas abandonné, j'ai tout simplement utilisé le lecteur "en ligne" de Google que j'ai intégré avec une WebView. Le résultat est assez propre et en plus c'est dispo sur tout les appareil Android.

Pour info si ça intéresse il suffit de construire l'url en partant de celle de Google : http://docs.google.com/viewer?url= + URLduPDF

EDIT: Au passage , ya toujours un double post ... Je suis désolé ..

Salut,

J'essaye aussi d'ouvrir un pdf depuis une url donc j'ai utilisé ta méthode url google docs, mais dans la webView il me met "your browser must support javascript" et ne m'affiche pas le pdf en question :/

Ci-joint une capture d'écran si quelqu'un a une idée..

J'ai pourtant le simulateur dalvikvm en 2.3.3

Il y a peut-être une autorisation à mettre dans le manifest ?

Merci

Modifié par guigs06
Lien vers le commentaire
Partager sur d’autres sites

  • 8 months later...

Salut,

J'essaye aussi d'ouvrir un pdf depuis une url donc j'ai utilisé ta méthode url google docs, mais dans la webView il me met "your browser must support javascript" et ne m'affiche pas le pdf en question :/

Ci-joint une capture d'écran si quelqu'un a une idée..

J'ai pourtant le simulateur dalvikvm en 2.3.3

Il y a peut-être une autorisation à mettre dans le manifest ?

Merci

Hello, je pense t'as du résoudre ton problème depuis, mais au passage, il faut les permissions web mais surtout aussi avoir activé le JavaScript avec la methode setJavaScriptEnabled :)

Lien vers le commentaire
Partager sur d’autres sites

  • 4 weeks later...

Bonjour, j'ai une petite question je pense qu'ici sera mieux que d’ouvrir un nouveau post :)

Voila ma question j'ai crée mon application à environ 50% j'ai une tabhost ( 5 onglets ) et pour chaque onglet j'aimerai integrer une liste de pdf

Et j'aimerai savoir ce qui est le plus judicieux ?

- Une webview avec google doc et mes pdf converti au bon format pour pouvoir les lires directement depuis l'application

OU Mettre mes pdfs directement en ressources dans mon application et les ouvrir avec adobe reader

Une chose importante je ne veux pas que mes pdfs puissent être téléchargés ( après il y aura toujours moyen je sais ... ) mais si possible que sa soit le moins facile ;)

Merci d'avance ;)

Lien vers le commentaire
Partager sur d’autres sites

  • 2 weeks later...

Avec la solution GoogleDocs, pour que celui-ci puisse convertir et afficher un PDF, il faut qu'il puisse le charger, et pour cela le PDF devra être accessible par une URL publique; donc, potentiellement, n'importe connaissant l'url pourra le télécharger, ce qui ne répond pas à ton besoin...

Dans l'autre cas (PDF en ressources dans l'application), c'est la solution qui était préconisée dans le début de ce thread. Là aussi, tu as un risque potentiel de fuite de tes documents, puisque pour que le lecteur PDF puisse afficher celui-ci, il faut qu'il puisse y accéder; mais le risque est moins important (fichier en local sur l'appareil, pas "facilement" accessible de base) et peut être encore minimisé en ne rendant visible le PDF que le temps de l'affichage de celui-ci

Après, il faut se poser la question de la taille, car 60 PDFs en ressources, ça peut faire au final un .apk ... volumineux

Lien vers le commentaire
Partager sur d’autres sites

C'est ce que je pensais .. J'ai fait des test et sur googleDoc tout le monde pouvais prendre les pdfs donc je vais voir comment sa marche pour le mettre en ressource , il faut que je mette mes PDF dans le dossier assets ? Puis après je fais comme indiqué en debut de poste URI et files ?

Désolé pour ces questions mais je commence tout juste dans le développement donc je gratte à droite et à gauche des tuto , bout de code ect

Merci d'avance !

Lien vers le commentaire
Partager sur d’autres sites

Oui, il faut mettre les fichiers dans assets. Puis ensuite, pour afficher un fichier, au moment voulu, le copier dans un répertoire temporaire, et passer la référence à ce fichier via un Intent (comme indiqué au début du post) à l'Activity d'affichage de PDF

Et utiliser startActivityForResult/onActivityResult pour pouvoir supprimer le fichier temporaire après que l'Activity d'affichage du PDF se soit terminée

Lien vers le commentaire
Partager sur d’autres sites

Je comprends pas grand chose , j'ai encore beaucoup à apprendre , tu aurais un tuto ou quelque chose me guidant étape par étape ?

Genre juste le fait de créer un bouton et lorsque je clique sur ce bouton , ça lance mon pdf ( test.pdf ) situé dans assets .

Après j'adapterais à mon application .

Lien vers le commentaire
Partager sur d’autres sites

Un tutoriel qui décrirait exactement ton besoin, je n'en ai pas connaissance (il en existe peut être un, qui sait...).

Pour ce qui d'afficher un PDF, tu as déjà toutes les informations (éparses, il suffit de les rassembler) dans ce post: comment copier depuis les ressources un contenu dans un fichier, comment demander l'affichage d'un fichier PDF, ...

Lien vers le commentaire
Partager sur d’autres sites

  • 2 months later...

Bonjour, désolé pour le "déterrage" est ce que quelqu'un peut me faire un bout de code tout simple où lorsqu'on appuie sur un bouton mon fichier .pdf se lance ( pdf situé dans asset )

Merci beaucoup , cela m'aiderait beaucoup

Lien vers le commentaire
Partager sur d’autres sites

Peut etre que tu aurais pu suivre le contenu de ce topic...

...Je reprends l'une des réponses contenue dedans :

Tant que tu ne comprendras pas que ton PDF, étant intégré dans ton application en tant que ressources, n'est pas accessible via une URI de type file:, tu ne pourras pas avancer.

Pour que tu puisses ouvrir ton PDF avec une autre appli, il faut donc que ce PDF soit quelque part dans le filesystem, à un endroit accessible par d'autres applis que la tienne; pour cela, il faut donc qu'à un moment ou un autre, tu copies ce PDF de tes ressources privées vers un endroit public dans le filesystem...

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...