Impression de fichiers HTML via ExecWB et modification des Headers et Footers [Résolu]

denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 26 juin 2008 à 14:57 - Dernière réponse : denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention
- 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:

<hr size="2" width="100%" />
Imports SHDocVw 'c:\windows\system32\shdocvw.dll

    Public Sub doPrint()

        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.

Merci d'avance
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 27 juin 2008 à 19:24
3
Merci
deux reins

Merci gillardg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de gillardg
Meilleure réponse
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 27 juin 2008 à 21:33
3
Merci
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.

Merci denler 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de denler
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 26 juin 2008 à 15:49
0
Merci
ton code n'est pas du vbnet !
Commenter la réponse de gillardg
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 26 juin 2008 à 16:17
0
Merci
Je sais pas, j'utilise Visual basic 2005 Express, et le code fonctionne.
Je pensais que c'était ça du VB.NET...
C'est quoi alors le VB.NET ?

Merci de m'éclairer !
Commenter la réponse de denler
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 26 juin 2008 à 16:31
0
Merci
Imports SHDocVw 'c:\windows\system32\shdocvw.dll 
?????????????????????????????????????????????????????????

fais un projet met un web browser dessus 


applele le WebBrowser1


et ajoute ceci




Private








Enum

ExecOLECMDID_OPTICAL_ZOOM = 63

OLECMDID_PRINT = 6



End





Enum








Private





Enum

ExecOptOLECMDEXECOPT_DODEFAULT = 0

OLECMDEXECOPT_PROMPTUSER = 1

OLECMDEXECOPT_DONTPROMPTUSER = 2

OLECMDEXECOPT_SHOWHELP = 3



End





Enum



Sub




zoomit()



Try








Dim

Res


As





Object

=


Nothing








Dim

MyWeb


As





Object


MyWeb =





Me

.WebBrowser1.ActiveXInstanceMyWeb.ExecWB(Exec.OLECMDID_OPTICAL_ZOOM, _

ExecOpt.OLECMDEXECOPT_DONTPROMPTUSER, 50, IntPtr.Zero)



Catch

ex


As

ExceptionMsgBox(



"Error:"

& ex.Message)



End





Try








End





Sub












Sub

printit()



Dim

TargetP


As





String

=


"c:\Temp\test.html"





'ce que je veux imprimer


PrintFiles =





Me

.WebBrowser1.ActiveXInstance


'Ouvre une instance d'internet explorer


PrintFiles.Navigate(TargetP)





'Ouvre la page que l'on veut imprimer


PrintFiles.ExecWB(Exec.OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vbNullString, vbNullString)





'Imprime le fichier, ne montre pas la boite de dial d'impression








End





Sub


 
Commenter la réponse de gillardg
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 26 juin 2008 à 18:14
0
Merci
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  '



PrintFiles.ExecWB(Exec.OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vbNullString, vbNullString)',


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...
Commenter la réponse de denler
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 26 juin 2008 à 18:50
0
Merci
après un essai d'impression je te signale que mon code imprime et que je n'ai ni en tête ni pied de page
Commenter la réponse de gillardg
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 26 juin 2008 à 23:02
0
Merci
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é ?...)

Merci d'avance
Commenter la réponse de denler
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 26 juin 2008 à 23:21
0
Merci
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é .
Commenter la réponse de gillardg
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 27 juin 2008 à 15:37
0
Merci
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...

Merci
Commenter la réponse de denler
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 27 juin 2008 à 15:41
0
Merci
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
Commenter la réponse de gillardg
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 27 juin 2008 à 15:51
0
Merci
c'est exactement ce que je fais...

Je comprends pas ce qui déconne.
Commenter la réponse de denler
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 27 juin 2008 à 16:37
0
Merci
éssaies ce lien car chez moi tout fonctionne bien http://cjoint.com/?gBqKddhkoh
Commenter la réponse de gillardg
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 27 juin 2008 à 18:07
0
Merci
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.

Là, je bloque...
Commenter la réponse de denler
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 27 juin 2008 à 18:31
0
Merci
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????????????????????????
Commenter la réponse de gillardg
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 27 juin 2008 à 18:37
0
Merci
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.
Commenter la réponse de denler
gillardg 3288 Messages postés jeudi 3 avril 2008Date d'inscription 14 septembre 2014 Dernière intervention - 27 juin 2008 à 18:48
0
Merci
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
Commenter la réponse de gillardg
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 27 juin 2008 à 18:50
0
Merci
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

        key = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(hkey_path)
        hkey_key = "header"
        key.SetValue(hkey_key, "")
        hkey_key = "footer"
        key.SetValue(hkey_key, "")

Merci pour ton aide
Commenter la réponse de denler
denler 11 Messages postés mardi 7 décembre 2004Date d'inscription 27 juin 2008 Dernière intervention - 27 juin 2008 à 21:38
0
Merci
petite erreur : remplacer : PrintFiles.Visible True par PrintFiles.Visible False
Commenter la réponse de denler

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.