Faire ouvrir des pdf incorporés en resources par le lecteur de l'os

Résolu
cs_Tigrou66 Messages postés 11 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 24 décembre 2011 - 18 déc. 2011 à 15:51
cs_Tigrou66 Messages postés 11 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 24 décembre 2011 - 21 déc. 2011 à 12:03
Bonjour ,

avant tout j'espère dans la être bonne section ou tout au moins pas trop loin (je code en vb 2008 express) ; mon problème est le suivant :

j'ai réalisé des fichiers d'aide en pdf (à cause de formules mathématiques) que je voudrais incorporer à l'exe pour que celui ci puisse les faire ouvrir par l’application par défaut de l'OS (voire éventuellement par le navigateur par défaut puisque qu'il y a un plugin pdf).

Je dois donc ajouter mon pdf aux ressources ; ça pas de problème ; ensuite je dois faire lancer le processus/application par défaut des pdf tout en lui passant le pdf en question.

C'est là que ça coince ; je ne sais pas trop comment on désigne ce fichier vu comme élément des ressources (il ne s'agit pas d'une ouverture par l'exe lui même) et au dit processus .

Cordialement.

12 réponses

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
18 déc. 2011 à 18:02
Salut

"je code en vb 2008 express"
C'est donc du VB.Net, pas VB6.

Il y a ShellExecute, une API de l'OS, à qui tu fournis le nom du fichier (PDF) et qui se débrouille à trouver et lancer l'application par défaut qui s'y rapporte.
Un exemple <dans cette source>

Mais je pense qu'en .Net, il doit y avoir quelque chose de plus propre dans la famille Process.
Désolé, je ne suis pas encore au point côté .Net

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
18 déc. 2011 à 18:08
Bonjour, jack,

C'est Process.Start (capable d'ouvrir à l'aide du programme associé par défaut à l'extension)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
18 déc. 2011 à 18:25
Il y a aussi la méthode signalée dans
cette discussion


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
Utilisateur anonyme
18 déc. 2011 à 19:30
Bonsoir,

Pour ouvrir un fichier placé dans les ressources, tu dois commencer par l'extraire, puis dans ton cas l'écrire pour pouvoir l'ouvrir dans une application externe à ton programme.

En admettant que ta ressource se nomme monpdf, tu peux écrire :
Using monstream As New IO.MemoryStream(My.Resources.monpdf)
    monstream.WriteTo(New IO.FileStream("monpdf.pdf", IO.FileMode.OpenOrCreate))
End Using
Process.Start("monpdf.pdf")
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
18 déc. 2011 à 21:38
Bonsoir,

Il te faut imbriquer alors 2 blocs Using / End using

Using monstream As New IO.MemoryStream(My.Resources.monpdf)
    using monfichier as new IO.FileStream("monpdf.pdf", IO.FileMode.OpenOrCreate)
       monstream.WriteTo(monfichier)
    end using
End Using
Process.Start("monpdf.pdf")
3
cs_Tigrou66 Messages postés 11 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 24 décembre 2011
18 déc. 2011 à 21:27
Merci à tous je vais me débrouiller avec tout ça !

@banana32 : ça marche jusque l'ouverture : le pdf est bien créé dans le dossier de lancement de l'application mais foxit reader signale une violation de partage.Idem en remplaçant OpenOrCreate par Create seul.Mais je me rapproche de la solution !
0
cs_Tigrou66 Messages postés 11 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 24 décembre 2011
19 déc. 2011 à 09:19
Ca marche impeccable : le fichier est créé et s'ouvre bien dans le lecteur par défaut et pas de signalement d'écrasement s'il existe déjà.

seul petit bémol : si le fichier est resté ouvert dans l'appli pdf alors une nouvelle demande signale qu'un processus travaille déjà dessus.

(Je vais essayer d'y remédier tout seul cette fois).

Merci encore.
0
cs_Tigrou66 Messages postés 11 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 24 décembre 2011
19 déc. 2011 à 15:09
Finalement j'ai mis ceci :

Using monstream As New IO.MemoryStream(My.Resources.monpdf)
    using monfichier as new IO.FileStream("monpdf.pdf", IO.FileMode.OpenOrCreate)
       monstream.WriteTo(monfichier)
    end using
End Using


... dans le "form load"

et ceci

Process.Start("monpdf.pdf")


dans le code associé au bouton déclencheur de l'aide ; et plus de pb !
0
Utilisateur anonyme
19 déc. 2011 à 17:23
Oui mais un petit test de présence du fichier (ou plutôt d'absence) suffirait :
if not my.computer.filesystem.fileexists(...) then 

Ceci t'éviterais l'extraction et l'écriture longue et pénible pour ta machine. Et tu n'auras alors qu'à l'ouvrir (process.start) dans la partie Else de la condition.

Bonne prog.
0
cs_Tigrou66 Messages postés 11 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 24 décembre 2011
19 déc. 2011 à 18:21
Oui mais je pensais mettre ça aussi dans le form load pour que les fichiers soient créés au premier lancement puis seulement recréés s'il venaient à être effacés.Mais il faut penser au cas où ils seraient effacés alors que l'appli est encore active.Il faut donc faire le test à chaque demande de lecture des fichiers.
0
Utilisateur anonyme
19 déc. 2011 à 19:00
Ok bonne programmation
0
cs_Tigrou66 Messages postés 11 Date d'inscription samedi 17 décembre 2011 Statut Membre Dernière intervention 24 décembre 2011
21 déc. 2011 à 12:03
J'ai codé comme ceci :


Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click
        If Not My.Computer.FileSystem.FileExists("Doc1.pdf") Then
            Using monstream As New IO.MemoryStream(My.Resources.Doc1)
                Using monfichier As New IO.FileStream("Doc1.pdf", IO.FileMode.Create)
                    monstream.WriteTo(monfichier)
                End Using
            End Using
        End If
        Process.Start("Doc1.pdf")



Il faut tout mettre dans le code du bouton mais le fichier ne sera quand même recréé que s'il a disparu , appli déjà ouverte ou non .Le problème des ouvertures multiples étant géré par le soft externe.
0