J'essaie d'ouvrir un fichier PDF à partir de mon application Android. J'utilise un Intent pour ce faire :
Intent intent = new Intent();
intent.setDataAndType(Uri.parse(url), "application/pdf");
startActivity(intent);
Ce code fonctionne bien pour certains pdf mais il échoue lorsque j'essaie d'en ouvrir d'autres.
C'est le message qu'Android me montre :
Il y a un problème avec le fichier.
Je dois préciser que les pdf qui s'ouvrent sans problème sont créés avec un modèle Crystal Report et que les pdf qui échouent sont créés avec un autre modèle.
Par contre, si j'ouvre l'url des pdf qui ne fonctionnent pas sur mon navigateur (sur mon ordinateur), il ne me donne aucune erreur d'ouverture. Je suppose donc qu'il y a peut-être une limitation sur Android qui diffère d'un pdf à l'autre (sur le modèle Crystal Report) mais je ne la vois pas.
Quelles sont les limites à l'ouverture d'un fichier pdf sous Android (taille, certains paramètres de Crystal Report non autorisés, etc...) ?
J'ai écarté l'idée qu'il puisse s'agir d'une limitation de taille, car les fichiers PDF qui posent problème sont plus petits que les fichiers qui ne présentent aucune erreur.
Cela prouve que je l'ai fait :
- Ouverture de mauvais PDFs sur le navigateur ~~> OK
- Télécharger un mauvais PDF sur un téléphone portable et l'ouvrir ~~> OK
- Ouverture de mauvais PDFs sur APP ~~> Erreur
- Ouverture d'un bon PDF sur l'APP de l'entreprise qui fait tomber les PDF ~~> OK
EDITAR
J'ai remarqué que j'utilisais http://
mais le PDF est sur un https://
j'ai donc modifié le protocole sur Uri.parse
méthode.
Lorsque j'ai effectué cette modification, l'application s'est arrêtée et une erreur s'est affichée dans le journal :
Android.content.ActivityNotFoundException : Aucune activité trouvée pour gérer l'intention
De plus, j'ai remarqué que les PDF qui ne me donnent aucune erreur, sont dans une url avec http://
au lieu de https://
donc je suppose que https://
Le protocole peut être le problème.
Est-ce que je peux seulement ouvrir http://
demande sur un Intent ?
0 votes
@matrix J'ai essayé d'utiliser Android 6.0.1 et Android 7.0 et j'obtiens le même comportement. Certains pdfs s'ouvrent sans problème et d'autres échouent quand j'essaie de les ouvrir donc je pense que ce n'est pas un problème avec la version, pas comme avec les fichiers pdf.
0 votes
Veuillez partager des exemples de PDF qui illustrent le problème.
0 votes
@mkl Je ne peux pas les partager car ce sont des factures de mes clients donc je ne peux pas donner leurs informations.
0 votes
@mkl Si vous avez besoin d'autres données que je peux vous fournir, faites-le moi savoir.
0 votes
Vous semblez avoir accès aux modèles Crystal Report qui sont utilisés pour créer ces PDF problématiques. Il suffit d'utiliser ces modèles avec des données fictives pour obtenir un fichier type.
0 votes
Pouvez-vous partager un rapport qui ne contient pas les données de votre client ? Si non, pouvez-vous me donner des détails sur le modèle de rapport afin que je puisse le générer de mon côté ?
0 votes
Est-ce que vous téléchargez le pdf et essayez ensuite de l'ouvrir avec un Intent ou vous essayez de l'afficher dans la vue web ?
0 votes
@MuratK. Eh bien, je l'ai téléchargé et je l'ai ouvert comme un fichier, mais pas à l'intérieur de l'application. Je pense que c'est quelque chose de lié à
https
car c'est le seul moment où le journal me donne une erreur, que j'ai ajoutée sur la question.0 votes
Pouvez-vous afficher l'extrait de code où vous téléchargez, trouvez le chemin vers le pdf et lancez un Intent pour celui-ci ?
0 votes
@MuratK. Je veux dire que je l'ai téléchargé manuellement depuis le navigateur de mon ordinateur et que je l'ai ensuite copié sur mon appareil mobile. Je n'ai pas utilisé de code pour cela.
0 votes
Je ne comprends pas, vous n'avez jamais écrit que vous transférez le pdf sur votre smartphone et qu'ensuite vous essayez de l'ouvrir. Je veux dire que c'est un cas complètement différent de ce que votre question de départ était sur...
0 votes
@MuratK. Eh bien, pour ce qui est de ma question, je me demande simplement comment l'ouvrir par l'intention. Je ne veux pas le télécharger. J'ai juste téléchargé le PDF de l'ordinateur et l'ai transféré sur le téléphone portable pour prouver que le PDF pouvait être ouvert si je le transférais manuellement. Dites-moi ce que je dois changer dans ma question qui crée cette confusion. Je suis désolé pour cela.
0 votes
Il y a 7 formats de pdf différents, le problème vient probablement d'un ou de plusieurs d'entre eux.
0 votes
@TonyKutzler Et comment puis-je savoir de quel type de PDF il s'agit ?
0 votes
Je ne me souviens pas des noms exacts, mais les types de médias sont : application/pdf, application/x-pdf, application/x-gzpdf, application/x-bzpdf. Je pense que ce sont tous les standards, mais je peux me tromper.
0 votes
Testez le fichier PDF avec Adobe Acrobat, dans Acrobat il y a l'option "Preflight", dans la fenêtre Preflight cherchez "syntaxe", rapportez le problème de syntaxe du PDF. Cliquez ensuite sur Analyser et corriger. Après cela, vérifiez le nouveau fichier enregistré.