Jump to content
bioslord

Démarrer intent pour lire un PDF depuis une URL

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é :|

Edited by bioslord

Share this post


Link to post
Share on other 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é ..

Edited by bioslord

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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 :)

Edited by bioslord

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 ...

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other sites

Cela je l'ai compris, mais pourquoi devoir parcourir , et copier l'intégralité du contenu du fichier, plutôt que de pouvoir en faire une copie dans le filesystem sans l'ouvrir (comme une commande cp) , ou le déplacer.

Share this post


Link to post
Share on other sites

Parce qu'il n'y a pas d'équivalent à une commande 'cp' dans le SDK qui permette de faire cette opération en un seul appel de méthode.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Edited by guigs06

Share this post


Link to post
Share on other sites

post-49268-0-09865300-1303977992_thumb.p

Dsl double post mais je n'ai pas réussi à modifier le fichier-joint il ne se met pas à jour, celui-ci montre l'erreur..

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other 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 !

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 .

Share this post


Link to post
Share on other 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, ...

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other 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...

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.






×
×
  • Create New...