denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008
-
26 juin 2008 à 14:57
denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008
-
27 juin 2008 à 21:38
Bonjour à tous,
je suis débutant (+) en VB.net, et je cherche à imprimer une page HTML avec VB.net.
Après une petite recherche, j'ai produit le code suivant qui fonctionne:
Dim TargetP As String = "c:\Temp\test.html"'ce que je veux imprimer
PrintFiles = New InternetExplorer 'Ouvre une instance d'internet explorer
PrintFiles.Navigate(TargetP) 'Ouvre la page que l'on veut imprimer
PrintFiles.Visible = False 'La fenêtre IE n'est pas affichée
PrintFiles.Silent = True 'Pas de messages retournés
PrintFiles.PutProperty("Print_Background", "yes") 'Imprimera les images et couleurs de fond
Do While (PrintFiles.Busy = True) 'on s'assure que la page soit chargée avant d'imprimer
System.Threading.Thread.Sleep(100) 'pause code de 100ms
Loop
PrintFiles.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, vbNullString, vbNullString) 'Imprime le fichier, ne montre pas la boite de dial d'impression
End Sub
<hr size="2" width="100%" />
Le problème est le suivant : Je ne veux pas d'entête, ni de pied de page. Il faut donc utiliser les paramètres (position 3 dans la commande ExecWB). J'ai bien trouvé une solution en charchant sur le web (Ici), mais cette solution traite le problème en C++ (langue que je ne connais pas).
Est-ce que quelqu'un qui connait le C++, et le VB.NET peut m'éclairer sur ce problème. A première vue, je ne suis pas le premier à rencontrer ce problème, mais je n'ai trouvé aucun post sur le net contenant une solution valable.
denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008 27 juin 2008 à 21:33
J'arrive maintenant à imprimer sans les entêtes, sans avoir besoin de créer de webbrowser, en utilisant la fonction Execwb
Voici donc le code final pour ceux qui en auront besoin :
<hr size= "2" width="100%" />
avant les procédures :
Imports SHDocVw 'c:\windows\system32\shdocvw.dll
la procédure :
Public Sub doPrint()
Dim TargetP As String = "http://google.fr" 'ce que je veux imprimer
Dim hkey_path As String = "Software\Microsoft\Internet Explorer\PageSetup"
Dim hkey_key As String
Dim key As Microsoft.Win32.RegistryKey
key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(hkey_path)
hkey_key = "header" 'pour l'entête de page
key.SetValue(hkey_key, "") 'chaine nulle = pas d'entête
hkey_key = "footer" 'pied de page
key.SetValue(hkey_key, "") 'idem
PrintFiles = New InternetExplorer 'Ouvre une instance d'internet explorer
PrintFiles.Navigate(TargetP) 'Ouvre la page que l'on veut imprimer
PrintFiles.Visible = True 'La fenêtre IE n'est pas affichée
PrintFiles.Silent = True 'Pas de messages retournés
PrintFiles.PutProperty("Print_Background", "yes") 'Imprimera les images et couleurs de fond
Do While (PrintFiles.Busy = True) 'on s'assure que la page soit chargée avant d'imprimer
System.Threading.Thread.Sleep(100) 'pause code de 100ms
Loop
'on imprime (ici en affichant la boite de dialogue d'impression
PrintFiles.ExecWB(OLECMDID.OLECMDID_PRINT, _
OLECMDEXECOPT.OLECMDEXECOPT_DODEFAULT, vbNullString, vbNullString)
End Sub
<hr size="2" width="100%" />
Merci Guillardg pour ton aide.
denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008 26 juin 2008 à 18:14
Merci pour ta réponse.
j'ai ajouter "Imports SHDocVw" au début de mon code afin d'utiliser les fonctions suivantes:
- PrintFiles = New InternetExplorer
- OLECMDID.xxxxx
En créant Printfiles comme 'New internetExplorer', je n'ai pas à créer de webBrowser (l'utilisateur final n'a pas besoin de voir cette page, il veux juste l'imprimer).
Ton code fait à quelques variantes près ce que je suis arrivé à faire jusqu'à maintenant.
En revanche, il ne résoud pas mon problème, qui est de faire passer des arguments dans '
et remplacer les vbNullString afin que l'impression se fasse sans que l'on imprime les entêtes et pieds de page. Je sais que c'est possible (j'ai trouvé un exemple, mais en C++), et le C++, je connais pas ! (voir premier message).
Désolé de te faire passer autant de temps sur un problème qui je le suppose est tout con...
denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008 26 juin 2008 à 23:02
Rebonjour,
Désolé d'être insistant, mais quand j'utilise ton code, les entêtes et pieds de page sont toujours présents:
Titre page Page x sur y
url site date
Quand tu imprimes une page web, par défaut dans IE, imprimes-tu ces entêtes et pied de page aussi ? Je sais que si, manuellement, je vais dans les paramètres IE, je peux enlever les entêtes et pieds de pages. Le problème c'est que je veux le faire ponctuellement et automatiquement...
Petite question sur ton code :
Je ne comprends pas l'intérêt de ta sub ZoomIt, peux-tu me l'expliquer ?
J'obtiens un message d'erreur quand j'exécute cette sub : "trying to revoke a drop target that has not been registred" (je vois pas ce que le drag/drop vient faire ici... Le code erreur est mal interprété ?...)
gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 20142 26 juin 2008 à 23:21
mon code fonctionne avec un objet WebBrowser.
zoomit permet de zoomer à 50% une page html affichée dans ce contrôle.
pour les entetes et pieds de page cherche ou IE stocke les valeurs (registre??)
tu les enlèves et tu les remets après ton impression et le tour est joué .
denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008 27 juin 2008 à 15:37
Bonjour Gillardg,
Désolé de revenir sur ton code, mais il ne fonctionne vraiment pas chez moi.
Ta sub Printit() ne fonctionne pas :
- printfiles n'est pas déclaré --> je le déclare en tant qu'object - j'ai ensuite une erreur à la ligne PrintFiles.Navigate(TargetP) - j'ai du rajouter ExecOpt. à la ligne suivante pour pouvoir lancer le programme
Je ne sais pas comment corriger le second problème...
gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 20142 27 juin 2008 à 15:41
si tu utilises vb 2005 , tu crées un nouveau projet et tu y colle un contrôle WebBrowser que tu appelles WebBrowser1
à l'éxecution il peut être invisible ce n'est pas important
denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008 27 juin 2008 à 18:07
Effectivement, le code que tu viens de me faire parvenir fonctionne.
J'arrive bien à imprimer (comme ça a toujours été le cas), mais les entêtes et pieds de page sont toujours présents....
je sais qu'il faut rentrer des paramètres dans la fonction Execwb (en 3eme position) pour ne plus avoir ces têtes et pieds de page. Le problème, c'est quels paramètres et quelle syntaxe ?
Suivant tes conseils, j'ai bien essayé le coup de changer les valeurs de la base de registre (HKEY_current_user\Software\Micosoft\Internet Explorer\Pagesetup\), mais on n'a pas les autorisations pour le faire à partir d'un logiciel autre que IE.
gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 20142 27 juin 2008 à 18:31
j'ai regardé les autorisations dans la base de registres je peux les modifier à partir de regedit donc :
un simple script et ça fonctionne éssaie ça :
script ------------------------------------------------------------------------
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\PageSetup]
"header"=""
"footer"=""
"margin_bottom"="0.75000"
"margin_left"="0.75000"
"margin_right"="0.75000"
"margin_top"="0.75000"
-----------------------------------------------------------------------endscript
tu l'enregistre en tant que ie.pagesetup.reg
et tu le lances.
si ça fonctionne tu pourras le faire de ton prog.
????????????????????es tu en mode administrateur????????????????????????
denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008 27 juin 2008 à 18:37
Oui, je suis admin sur mon PC, et en utilisant le regedit, pas de problèmes pour la modification de ces clés.
En programmation VB, j'arrive à lire ces clés sans problème, mais dès que j'essaye de les modifier, là, j'ai un message d'erreur me disant que je n'ai pas les droits nécéssaires.
gillardg
Messages postés3275Date d'inscriptionjeudi 3 avril 2008StatutMembreDernière intervention14 septembre 20142 27 juin 2008 à 18:48
ben mets le script ^^^^^^ dans un string de ton prog,
au lancement de ton prog , tu le transfères dans un fichier texte ,
tu l'executes avec Process.Start( "machin.reg")
et hop hop
denler
Messages postés11Date d'inscriptionmardi 7 décembre 2004StatutMembreDernière intervention27 juin 2008 27 juin 2008 à 18:50
Après recherche plus profonde, je fesais une erreur dans mon code, ce qui explique que je ne pouvais pas écrire dans cette clé de la base de registres
en ajoutant ceci au code, j'obtient bien le résultat souhaité :
Dim hkey_root As String = "HKEY_CURRENT_USER"
Dim hkey_path As String = "Software\Microsoft\Internet Explorer\PageSetup"
Dim hkey_key As String
Dim key As Microsoft.Win32.RegistryKey