Télécharger un PDF en local sur l'iPhone

2»

Réponses

  • Et si tu set son UTI?


  • C'est quoi un UTI ? Désolé pour mon ignorance


  • Une property de UIDocumentInteractionController.


    [tonDocInterController setUTI:@com.adobe.pdf];


  • Ca change absolument rien, toujours les mêmes options, et aucune nouvelle supplémentaires




  • Discussion intéressante : http://c2.com/cgi/wiki?GlobalVariablesAreBad




    Merci Joanna, je vais lire cela.


     




    J'ai effectivement plus d'options ("Message" et "Envoyer par e-mail" sont apparus) mais toujours pas de iBooks




    Je persiste à  penser que tu ne proposes pas un fichier pdf.


    Dans iPocket Draw, j'utilise cette fonction avec un choix du format de fichier à  transférer, soit en natif, dxf, pdf ou jpeg.


    iBooks ne m'est proposé que si je propose un fichier pdf.



  • Je persiste à  penser que tu ne proposes pas un fichier pdf.


    Dans iPocket Draw, j'utilise cette fonction avec un choix du format de fichier à  transférer, soit en natif, dxf, pdf ou jpeg.


    iBooks ne m'est proposé que si je propose un fichier pdf.




     


    J'ai essayé de relire le code, et je n'ai pas compris la logique de l'enregistrement ou du get.

  • Ben77650Ben77650 Membre
    avril 2015 modifié #38

    Je persiste à  penser que tu ne proposes pas un fichier pdf.

    Dans iPocket Draw, j'utilise cette fonction avec un choix du format de fichier à  transférer, soit en natif, dxf, pdf ou jpeg.

    iBooks ne m'est proposé que si je propose un fichier pdf.



     

    Je propose pourtant bien un fichier PDF.

     

    Voila mon PHP



    header('Content-type: application/pdf');


    if (isset($_POST['idConnexion']))
    {
    $idConnexion = $_POST['idConnexion'];
    $mdpConnexion = $_POST['mdpConnexion'];
    $idFacture = $_POST['idFacture'];
    }
    else
    {
    $idConnexion = $_GET['idConnexion'];
    $mdpConnexion = $_GET['mdpConnexion'];
    $idFacture = $_GET['idFacture'];
    }

    ini_set('soap.wsdl_cache_enabled', '0');

    $wsdlURL = 'https://xxxx.com/Balm/Services_2_0.wsdl';
    $ns = 'https://erp.xxxx.com/developerKey/';

    $devKey = 'a1b2c3';

    $soap = new SoapClient($wsdlURL);
    $soap->__setSoapHeaders(new SoapHeader($ns, 'developerKey', $devKey));

    $params = new stdClass();
    $params->context = 'Client';
    $params->login = $idConnexion;
    $params->password = $mdpConnexion;

    $res = $soap->GetContactDevKey($params);

    $devKey2 = $res->result;

    $soap2 = new SoapClient($wsdlURL);
    $soap2->__setSoapHeaders(new SoapHeader($ns, 'developerKey', $devKey2));

    $res2 = $soap2->Authenticate($params);

    $token = $res2->result->VisitorToken;

    $demandsParam = new stdClass();
    $demandsParam->visitorKey = $token;
    $demandsParam->printType = 'PrintBill';
    $demandsParam->id = $idFacture;
    $factures = $soap2->GetClientPrint($demandsParam);

    echo $factures->result->Content;

  • Et si tu loggais [NSURL URLWithPath:get] ? Notamment [NSURL URLWithPath:get].absoluteString. Tu devrais comprendre ton erreur


    Tu verrais le soucis je pense...


     


    Même genre d'erreur que là  :

    http://stackoverflow.com/questions/28267352/nsurlerrordomain-with-code-1100/28510196#28510196


  • NSLog(@log 1: %@", [NSURL URLWithString:get]);
    NSLog(@log 2: %@", [[NSURL URLWithString:get]absoluteString]);
    log 1: http://extranet.aaaaa.com/app/facture.php?idConnexion=monUsername&mdpConnexion=leMdp&idFacture=12345

    log 2: http://extranet.aaaaa.com/app/facture.php?idConnexion=monUsername&mdpConnexion=leMdp&idFacture=12345

     



     


    Donc tout est bon, d'autant plus que j'utilise à  peu de choses près le même code pour ajouter mon PDF en pièce jointe lors de l'envoi d'un mail


  • samirsamir Membre
    avril 2015 modifié #41


    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 :



    - (UIViewController*)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
    {
        return self;
    }

    3. Il faut aussi que tu gardes une référence forte sur ton objet : UIDocumentInteractionController  dans ton contrôleur. 



    @property (nonatomic, strong) UIDocumentInteractionController *documentController;

    4. Vérifie bien que ton document PDF est bien dans l'emplacement désigné par ton path.




     


    Est-ce que tu as vérifier le premier point ? LE ficher PDF doit être dans le système de fichier local pour que le UIDocumentInteractionController puisse travailler avec.


     


    Est-tu sur que tu as bien téléchargé le PDF ?


    Est-tu sur que l'URL LOCALE que passes au UIDocumentInteractionController est bonne ?


  • Oui c'est sur, tu peut vérifier j'ai mis le code sur la 1ère page (en bas).


     


    Et oui elle est bonne car ça marche pour l'ajout du PDF en PJ d'un mail


  • Je ne comprends pas comment ton ton puisse marcher 



    NSString *get =[[NSString alloc] initWithFormat:@http:;//aaaa.com/app/facture.php?idConnexion=%@&;mdpConnexion=%@&;idFacture=%@",idConnexion, mdpConnexion, idFacture];

    UIDocumentInteractionController* myDocumentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:get]];

    Il faut passer au  UIDocumentInteractionController l'URL local ou tu a stocké le fichier PDF.




  • Oui c'est sur, tu peut vérifier j'ai mis le code sur la 1ère page (en bas).




    Ah ?


    Il serait bon de reposter ton code actuel (avec les potentielles modifications.

    Encore une fois, sur le bout de code que j'ai vu en page 1, je ne comprends pas l'ordre avec lequel tu appelles les différents méthodes.


  • - (void) sauvegardeIbooks{
    NSLog(@iBooks \n\n);

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [paths objectAtIndex:0];

    documentDirectory = [documentDirectory stringByAppendingPathComponent:@pdf];

    [[NSFileManager defaultManager] createDirectoryAtPath:documentDirectory withIntermediateDirectories:YES attributes:nil error:nil];

    NSString *filePath = [NSString stringWithFormat:@%@/%@", documentDirectory, idFacture];

    NSString *get =[[NSString alloc] initWithFormat:@http:;//extranet.aaaa.com/app/facture.php?idConnexion=%@&;mdpConnexion=%@&;idFacture=%@",idConnexion, mdpConnexion, idFacture];

    NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:get]];

    //NSLog(@FP: %@", filePath);

    [data writeToFile:filePath atomically:YES];

    [documentController setUTI:@com.adobe.pdf];
    documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:get]];
    documentController.delegate = self;
    //[documentController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
    [documentController presentOptionsMenuFromRect:CGRectZero inView:self.view animated:YES];

    //[self ouvrirIbooks];
    }

    - (void) ouvrirIbooks{
    //Pour ouvrir l'application iBooks
    NSString *stringURL = @itms-books:;
    NSURL *url = [NSURL URLWithString:stringURL];
    [[UIApplication sharedApplication] openURL:url];
    }

  • documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
  • [documentController setUTI:@com.adobe.pdf]; ça marche vraiment cette ligne ? Vu que t'as pas encore alloué documentController, ça fait bizarre... Il n'est pas nil la première fois ?


     


    + ce que vient de dire samir qui m'a grillé.


    Car [NSURL fileURLWithPath:get] si tu le loggues, ça ne donne pas un truc bizarre ?


  • Bonjour,


     


    Effectivement ça marche comme ça, merci beaucoup en tout cas :)


     


    Dernière petite question, il y a pas moyen qu'afficher uniquement iBooks dans le menu ?


     


    Ou à  défaut, juste iBooks et Mail ? Et comment savoir quand on clique sur Mail ?


  • LarmeLarme Membre
    avril 2015 modifié #49

    Et comment savoir quand on clique sur Mail ?



    Peut-être avec les méthodes delegates qu'il faut ?

    ​documentInteractionController:willBeginSendingToApplication: ou documentInteractionController:didEndSendingToApplication:

    Sachant qu'application, d'après la doc:



    The bundle identifier of the application that is about to open the document. This value corresponds to the value in the CFBundleIdentifier key of the application's Info.plist file.




    Si tu ne veux que de l'iBooks, je t'invite à  ne pas mettre l'icône, et faire un simple bouton avec du texte et utiliser ibooks://


  • Si je peux me permettre @Ben,


     


    Y en a une 40 de réponse à  ta question, c'est une bonne chose mais :


     


    J'ai l'impression que c'est souvent comme ça, tu poses des questions sans que tu cherches toi même. La meilleure façon de progresser est d'assayer de faire un maximum de choses soit même. 


     


    Sinon commence par regardé du coté delegate de UIDocumentInteractionController.



  • J'ai l'impression que c'est souvent comme ça, tu poses des questions sans que tu cherches toi même. La meilleure façon de progresser est d'assayer de faire un maximum de choses soit même. 




     


    En l'occurence la pour ce souci, je cherche depuis le début de la semaine et mon collègue (un débutant aussi) m'a même aidé à  cherché sans résultat

  • C'était bien le [NSURL fileURLWithPath:get] qui n'était pas bon alors ?


  • Visiblement oui,


     


    Merci à  tous ceux qui m'ont aidés en tout cas


  • ça fait du bien de résoudre son problème avant de parti ren week-end, moi j'arrive pas pour l'instant :)




  • ça fait du bien de résoudre son problème avant de parti ren week-end, moi j'arrive pas pour l'instant :)




    Pas de week-end alors... :'(


  • ça fait du bien de résoudre son problème avant de parti ren week-end, moi j'arrive pas pour l'instant :)




    Je confirme surtout que la v1.1 de l'appli est quasi prête à  être déployée (reste juste quelques petits détails et des vérifications a faire).


    Bon courage a toi Samir, et également à  toi Eric P
  • AliGatorAliGator Membre, Modérateur
    Appeler fileURLAtPath et lui passer une URL "http:" en même temps c'est sûr que ça n'allait pas marcher...
    Donc les gens qui t'ont répondu avaient bon depuis le début, malgré ton insistance "non je passe bien la bonne URL" tu ne passais même pas un truc se terminant en ".pdf" c'est sûr que ça n'allait pas aider ^^
Connectez-vous ou Inscrivez-vous pour répondre.