Télécharger un PDF en local sur l'iPhone
Bonjour,
J'aimerais télécharger un document PDF sur mon application en local sur l'iPhone et l'enregistrer dans eBook (afin si nécessaire de l'envoyer par mail).
J'ai fais ça:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
documentsDirectory = [documentsDirectory stringByAppendingPathComponent:@PDF_Documents];
[[NSFileManager defaultManager] createDirectoryAtPath:documentsDirectory withIntermediateDirectories:YES attributes:nil error:nil];
NSString *filePath = [NSString stringWithFormat:@%@/Facture%@", documentsDirectory, idFacture];
[data writeToFile:filePath atomically:YES];
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bonjour,
Je ne vois pas bien ce que fait ton code, mais une fois que tu as ton fichier pdf, tu peux le transférer dans une autre app qui sait le gérer, donc iBooks par exemple, avec un "UIDocumentInteractionController interactionControllerWithURL".
Par contre de cette manière, l'utilisateur doit choisir l'app qui recevra le fichier.
Je ne sais pas si le fichier peut être transféré obligatoirement et directement dans iBooks.
Bonjour Eric,
A vrai dire c'est un code que j'ai repris de stackoverflow mais effectivement il ne marche pas.
On peut pas faire en sorte que ça soit enregistré automatiquement avec iBooks ?
Ce logiciel lit les PDF et est de base sur tous les devices de la marque Apple.
Autrement comment ça se passe avec le UIDocumentInteractionController interactionControllerWithURL stp ?
Une fois que tu as ton fichier pdf, tu fais
où "file_to_transfert" est le chemin dudit fichier.
Et cela te présente la liste des apps qui peuvent recevoir ton fichier en fonction de son type.
Tu peux le voir avec mon app "iPocket Draw Lite" par exemple.
Hello Eric P.
Je viens de tester ton bout de code, mais cela ne m'a absolument rien donner.
J'aimerais qu'il y ai 2 options possibles sur mon PDF:
1°) L'enregistrer sur iBooks
2°) L'envoyer directement par mail.
L'utilisateur décidera de l'option qu'il veut effectuer, selon 2 boutons bien distincts.
Si toi (ou un autre membre de CocoaCafé) a une solution qui marche, ou si tu pouvais m'éclaircir sur le bout de code précédent (vu que visiblement il marche dans ton appli) ça serait pas de refuser
As-tu checké que ton URL est bien non-nil ?
Oui l'URL n'est pas nil, j'en suis certain vu qu'il m'affiche mon pdf dans ma web view
Possibilités d'erreurs :
1. Il faut que ton fichier PDF soit déjas téléchargé pour que tu puisses l'ouvrir avec : UIDocumentInteractionController
2. N'oublie pas d'assigner le delegate et d'implémenter la méthode :
3. Il faut aussi que tu gardes une référence forte sur ton objet : UIDocumentInteractionController dans ton contrôleur.
4. Vérifie bien que ton document PDF est bien dans l'emplacement désigné par ton path.
Bonjour,
Je reviens à nouveau vers vous concernant le souci d'enregistrement du PDF. (celui de l'envoi du PDF en PJ a été réglé).
J'arrive toujours pas à détecter iBooks parmi les applications compatibles.
Voila ce que je fait actuellement
Avec ça j'ai "Google Drive" et "USB Key" qui me sont proposés.
Seulement que je clique sur l'un ou l'autre ça me plante l'application.
J'ai lu quelque part d'utiliser les méthodes ci dessous. Est ce vraiment nécessaire ou est ce optionnel ?
Merci d'avance pour vos réponses
Si ça plante, y'a sûrement un message d'erreur non ? Lequel ?
Si tu as mis self en tant que delegate (et un < UIDocumentControllerDelegate > où il faut), tu devrais avoir des warnings lorsque des méthodes delegates ne sont pas optional.
J'ai aucun warning que ça soit en mettant les 3 méthodes ou en ne les mettant pas. Doit-je en déduire qu'elles sont optionnelles ?
Pour le message d'erreur ça me met ça:
Sinon tu saurais pourquoi dans la liste des applications compatibles j'ai pas iBooks s'il te plait ?
Quant à ton plantage, si tu ne nous dis pas le message d'erreur / crashlog que tu as, on va avoir du mal à t'aider. Et je suis même sûr que si tu lis le message d'erreur que tu as dans ton plantage il te dit quel est le problème
Comment régler ce problème de corruption mémoire s'il te plait ?
Et comment faire en sorte d'avoir l'application "iBooks" parmi les applications pouvant télécharger mon PDF
Mets ton documentController en strong ?
As-tu iBooks d'installé sur le device sur lequel tu testes?
Doc Apple
Je sais pas comment tu te débrouilles pour chercher dans la doc, mais c'est pourtant pas bien dur à trouver et tout y est écrit (cf au début dudit lien dans la doc) :
@Larme Tu crois que ça va changer quelque chose de le mettre en strong ?
Oui iBooks est installé sur mon iPhone, et je crois avoir lu qu'il l'était de base de toute manière sur tous les téléphones / tablettes Apple
@Ali: Oui j'ai vu ça après, c'est juste que j'étais pas sur la bonne page de la documentation
http://stackoverflow.com/questions/26343420/open-local-pdf-file-in-ibooks
Sinon, d'après l'erreur, il semblerait que tu perdes la trace du document controller (notamment quand le delegate lui demande d'ouvrir le fichier avec une autre app). D'où la piste potentielle apparemment appuyée par le lien de SO.
J'ai pas cherché d'avantage, donc pas de regard en profondeur, mais ça semblerait être une explication potentielle.
Pourquoi tu reposes la question à @Lame alors qu'il suffit juste que tu le changes et de voir ce que ça donne
Je trouve bizarre le :
[NSURL fileURLWithPath:get]
Es-tu sûr que get pointe sur un fichier pdf ?
J'ai à peu près le même code et iBooks m'est proposé.
Pour ton crash, mon code n'étant pas en Arc, j'ai un retain sur mon UIDocumentInteractionController qui est déclaré en global de mon .m
Ouais moi aussi je ne lis qu'une page (au hasard de préférence) de chaque documentation.
Je ne comprends pas tout ce que je lis ;D
Ha, je pensais bien avoir une réaction mais pas jusqu'à la crise cardiaque !
Oui j'avoue, j'utilise des globales et je n'ai toujours pas compris pourquoi il ne faudrait pas le faire, désolé.
Discussion intéressante : http://c2.com/cgi/wiki?GlobalVariablesAreBad
Oui, c'est un pdf avec un "Content-type: application/pdf"
J'était sur la page de UIDocumentInteractionController et non celle de UIDocumentInteractionControllerDelegate
Effectivement avec le UIDocumentInteractionController en strong ça marche très bien.
Par contre j'ai toujours pas l'application iBooks de disponible dans les applications pouvant ouvrir mon document.
Une idée d'où ça peut venir s'il vous plait ?
Apparemment, y'a une différence entre :
presentOpenInMenuFromRect:inView:animated: et presentOptionsMenuFromRect:inView:animated:.
J'ai pas tout lu, mais j'ai cru voir sur SO que dans un cas où un autre cela pouvait montrer ou non iBooks, et la Doc signale une différence. En diagonale, j'ai cru comprendre que l'un disait : " Plus ou moins n'importe qui est intéressé par mon fichier ? ", tandis que l'autre dit : " Qui est intéressé par un fichier .pdf ? ". Ce qui est différent.
Peut-être qu'il faudrait remplir correctement un certain champ.
Ok je vais regarder de ce côté la alors, merci
Ca n'empêche que si quelqu'un a la solution je la veut bien
J'ai effectivement plus d'options ("Message" et "Envoyer par e-mail" sont apparus) mais toujours pas de iBooks