PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → [WM17] Ouvrir un PDF SOUS IOS
[WM17] Ouvrir un PDF SOUS IOS
Débuté par Dominique, 21 aoû. 2012 12:02 - 18 réponses
Posté le 21 août 2012 - 12:02
Bonjour à tous,

Dans le cadre d'un projet sous IPAD, je dois ouvrir des fichier PDF à partir de mon application , le mieux serait de lancer l'application associé à ce type de document en lui donnant le chemin du fichier.

j'ai vu dans la LST 88 un bout de code sous XCODE pouvant faire office ou en donnant l'URL "MAILTO:TEST@TEST.com" ouvre l'application associé mais voila, comment passer un fichier local PDF sous forme d'url sous iOS ?

Sinon je me demandais si quelqu'un aurait trouver le moyen d'ouvrir un logiciel tiers sous IOS afin d'ouvrir un fichier PDF ou image ?

Merci d'avance et bon dev à tous.
Posté le 15 janvier 2013 - 15:01
Bonjour,

Je peux ouvrir un PDF a partir d'un champs HTML sous IOS. il suffira dans ton projet soit de passer le pdf lors de l'installation, soit de le passer via web service via lecture d'un enregistrement binaire.

Le problem c'est que le champs HTML ouvre le PDF comme une image et donc c'est tres succinct, il n'y a pas de table de matieres etc... Il faudrait pouvoir appeler un vrai lecteur de PDF a partir d'IOS genre adobe etc..

QQ a t il un solution. Je ne trouve pas de Shellexecute sur IOS ;) donc si qq sait comment appeler le pdf reader adobe en lui passant le fichier pdf a ouvrir je suis preneur.

Merci d'avance
Xavier
Posté le 16 janvier 2013 - 10:04
Bonjour,

essaye avec http://doc.pcsoft.fr/fr-fr/?3035007
LanceAppliAssociée
Posté le 16 janvier 2013 - 12:37
Merci Florian pour ta reponse.

Je vais donc devoir migrer sur Windev Mobile 18 car cette fonction est nouvelle pour IOS.
J'en profite, sur IPAD comment on associe un type de ficher avec un programme.
par exemple si j'ouvre un e fichier PDF, comment saura t il qu il doit ouvrir ADOBE PDF reader ou un autre software installee ?

Merci beaucoup
Cordialement,
Xavier.


Florian wrote in news message <d2d98466a2a50aa70ea5fe104f06f3a1@news.pcsoft>:
Bonjour,

essaye avec http://doc.pcsoft.fr/fr-fr/?3035007
LanceAppliAssociée
Posté le 17 janvier 2013 - 11:01
Pour avoir un menu ouvrir (applications associés au fichier)


Créer une procedure globale et saisir

#import <UIKit/UIKit.h>
void LaunchPDF(void* currentView)
{

UIViewController *tmpView = (UIViewController*)currentView;

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
path = [path stringByAppendingString:@"/sample.pdf"];

UIDocumentInteractionController* documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:path]];
[documentController retain];
documentController.UTI = @"com.adobe.pdf";
[documentController presentOpenInMenuFromRect:CGRectZero
inView:tmpView.view
animated:YES];

}
Posté le 17 janvier 2013 - 12:29
Merci beaucoup Florian.

Tres sympa. Je vais donc commender WM18 et tester tout cela.

Je ne voulais plus utiliser WM a cause des zones repetees qui ne s'affiche pas toujours... qq fois j'ai un ecran blanc et quand je passe le doigt sur l'ecran finalement la ZR s'affiche mais ensuite l'appli n'est plus stable... ( je n'utilise pas d'image dans ma ZR car il y avait un forum la dessus). Je n'ai jamais eu de fixes la dessus malgres un projet envoye au support PCSOFT... comme ca...

dans tous les cas merci pour ton aide,

Xavier


Florian wrote in news message <62f4efd6fe758b5e35c9037db3b2b62c@news.pcsoft>:
Pour avoir un menu ouvrir (applications associés au fichier)


Créer une procedure globale et saisir

#import <UIKit/UIKit.h>
void LaunchPDF(void* currentView)
{

UIViewController *tmpView = (UIViewController*)currentView;

NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
path = [path stringByAppendingString:@"/sample.pdf"];

UIDocumentInteractionController* documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:path]];
[documentController retain];
documentController.UTI = @"com.adobe.pdf";
[documentController presentOpenInMenuFromRect:CGRectZero
inView:tmpView.view
animated:YES];

}
Membre enregistré
11 messages
Posté le 17 janvier 2013 - 23:02
Florian,

Ton code ne fonctionne pas.
Et c'est normal vu qu'il manque le Delegate.
Pour cela, il faut créer un objet de classe UIViewController
<UIDocumentInteractionControllerDelegate> et renseigner les fonctions (au minimum) openDocumentIn et viewDidLoad.

Laura
Posté le 18 janvier 2013 - 00:11
Bonsoir à toutes et à tous ,

Je suis fort intérressé par ce code et je vous en remercie.

Auriez vous le code complet avec l'objet en question aisni que la methode d'appel s'il vous plait ?

Vous remerciant par avance.

Bonne soirée à toutes et a tous.
Posté le 18 janvier 2013 - 09:46
Je ne comprends pas, ca marche très bien chez moi.
Et le but était bien de ne pas avoir de delegate pour simplifier le code.

le code d'appel est : LaunchPDF(Handle(FEN_Sommaire,HandleUIViewController))

exemple de projet :
http://depot.pcsoft.fr/resource.awp…
Posté le 18 janvier 2013 - 10:36
Super merci pour toutes ces infos.
Bon dev à toutes et a tous
Membre enregistré
11 messages
Posté le 18 janvier 2013 - 12:28
Bonjour Florian,

Tu as raison, cela fonctionne.
Désolée, je l'avais pourtant testé hier soir et bien sur avant de galérer à ecrire cet objet Delegate (je n'y connais rien en Objective-C).

Pour info, pour passer le chemin du PDF à ouvrir, il faudra ecrire :
LaunchPDF(Handle(MaFenêtre, HandleUIViewController), CheminPdf)


#import <UIKit/UIKit.h>
void ShareV2(void* currentView, NSString *path)
{
UIViewController *tmpView = (UIViewController*)currentView;
UIDocumentInteractionController* documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:path]];
[documentController retain];
documentController.UTI = @"com.adobe.pdf";
[documentController presentOpenInMenuFromRect:CGRectZero inView:tmpView.view animated:Yes];
}


Je vais pouvoir alléger mon code !

Pour l'instant, j'essaye d'implémenter dans Windev Mobile le fait de pouvoir choisir plusieurs photos (en utilisant la librairie ELCAlbumPickerController), sans succès pour l'instant. Si tu as une idée...

Laura
Membre enregistré
141 messages
Posté le 18 janvier 2013 - 13:29
Quel est ton problème dessus ?
Posté le 18 janvier 2013 - 13:47
J'arrive a faire un choix multiple mais impossible de ferme la uiview
Membre enregistré
11 messages
Posté le 19 janvier 2013 - 13:03
Bonjour,

Florian, peux-tu mettre à disposition ton projet (dans le dépot de PcSoft ?) qui arrive à faire une selection multiple, même si tout ne fonctionne pas.

Merci
Laura
Posté le 20 janvier 2013 - 10:30
Bonjour,

Merci Florian.
J'ai ajouté les fichiers sources de la librairie (.m, .h, .xlib, .png) depuis XCode ainsi que le Framework AssetsLibrary.framework (sinon il y avait une erreur au link).
Mais à l'exécution, l'ecran devient noir.

Est-ce comme cela qu'il fallait faire ?
N'y a-t-il pas un moyen d'intégrer cela depuis WM pour ne pas avoir à le refaire depuis XCode à chaque compilation ?

Merci d'avance
Laura
Posté le 21 janvier 2013 - 10:49
Ce projet contient les librairies dans le dossier exe,
Pensez a verifier le chemin lors de la génération du projet xcode

https://www.dropbox.com/s/i8vn6ciflvzepkk/SelecteurImages2.zip
Membre enregistré
141 messages
Posté le 21 janvier 2013 - 11:23
Tu peux ajouter les fichiers à la compilation du projet. Il te suffit juste de les déclarer dans des fonctions globales Objective-C.
Membre enregistré
11 messages
Posté le 21 janvier 2013 - 22:03
Bon, j'ai réussi à lancer la selection de plusieurs images, sortir de la vue quand on clique sur 'Cancel', traiter les images selectionnées, mais uniquement revenir sur la 1ère page de selection quand on clique sur 'Done' (et donc je n'ai pas encore réussi à sortir complètement de cette vue).

Voici ce que j'ai modifié du code :
- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)Info
{
for(NSDictionary *dict IN Info)
{
// Traiter les images selectionnées
// L'image est sous [dict objectForKey:UIImagePickerControllerOriginalImage]
}
[self.presentingViewController.presentingViewController dismissModalViewControllerAnimated:Yes];
}

- (void)elcImagePickerControllerDidCancel:(ELCImagePickerController *)picker
{
[self.presentingViewController dismissModalViewControllerAnimated:Yes];
}


Donc, on y est presque mais pas encore !
Laura