Impression d'un document word ou pdf

Soyez le premier à donner votre avis sur cette source.

Vue 13 384 fois - Téléchargée 1 223 fois

Description

Bonjour à tous,
Ce code va vous permetre d'imprimer des document Word ou PDF en tache de fond.
Et oui c'est un Contrôle ActiveX, vous pouver l'appeler appartir d'une page Web avec une fonction javaScript en lui passant comme paramète le chemin du fichier à imprimer.
Conseil: Pour intéger des composant ActiveX utilisé un logiciel fourni gratuitement par microsoft, son nom Microsoft ActiveX Control Pad.
Au faite vous allé avoir besoin d'un controle Timer...

Source / Exemple :


'utilisé pour word
Dim docword As New Word.Application

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
'Permet de fermer la fenetre
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

' La fonction GetParent recherche le handle du parent propriétaire de la fenêtre indiquée.
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long

' La fonction GetWindow recherche le handle de la fenêtre active
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long

' La fonction GetWindowTextLength recherche la longueur, en caractères, du texte de barre du titre de la fenêtre indiquée (si la fenêtre a une barre de titre). Si la fenêtre indiquée est une commande, la fonction recherche la longueur du texte dans la commande.  Cependant, GetWindowTextLength ne peut pas rechercher la longueur du texte d'une commande d'édition dans une autre application.
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

' La fonction GetWindowText copie le texte de la barre du titre de la fenêtre indiquée (si elle a un) dans un buffer. Si la fenêtre indiquée est une commande, le texte de la commande est copié. Cependant, GetWindowText ne peut pas rechercher le texte d'une commande dans une autre application.
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long

'La fonction FindWindow va permettre de retouver un Handle afin de pouvoir fermet la tache Acrobat Reader
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private docPdf As Boolean
Private Const GW_HWNDFIRST = 0
Private Const GW_HWNDNEXT = 2
'Je ne sais pas vraiment ce que ca contrôle mais c'est présent sur tout les windows.
'Grace à ce "Shell_TrayWnd" windows va nous retourner son handle qui sera bien pretique
Private Const monSuperHandle = "Shell_TrayWnd"

Public Sub GoImprime(unChemin As String)
'teste permettant de savoir si le fichier est un RTF ou un PDF

Dim teste As String
teste = UCase$(Right$(unChemin, 3))

If teste = "PDF" Then
    Dim Retour As Long
    docPdf = True
    
    'la fonction ShellExecute va ouvrir l'application adapté à l'extention et le paramètre Print va permetre d'imprimer, l'application sara ensuite fermé
    Retour = ShellExecute(hwnd, "print", unChemin, vbNullString, vbNullString, 1)
    'mise en route du timer
    Timer1.Enabled = True
    
      '150 miliseconde avant la fermeture de word
    Timer1.Interval = 150
       
    Else
    docPdf = False
    'Création d'une instance de WinWord
    Set docword = CreateObject("word.application")
    'True pour word visible et false pour le mettre en arrière plan
    'en gros fals va permètre d'ouvrir WinWord en tache de fond
        docword.Visible = False
    
        docword.DisplayAlerts = False    'évite les erreurs de traitement
    
        'ouverture du document, sans la sélection du type de selui-ci
      doc = docword.Documents.Open(unChemin, 0)
      'impression de celui ci
      docword.ActiveDocument.PrintOut
    
    'mise en route du timer
    Timer1.Enabled = True
    
      '10 sec avant la fermeture de word
    Timer1.Interval = 1000
   
End If

End Sub

Private Sub Timer1_Timer()

If docPdf = True Then

'cette partit de code à été récupéré je l'ai un tout petit peut modifié
'la source de ce code http://www.vbfrance.com/article.aspx?ID=5188
        Dim CurrWnd As Long
        Dim Parent As Long
        Dim Length As Long
        Dim NomTache As String
        Dim NomAAR As String
        ' Handle de la fenetre active
        'pourquoi un findWindow???
        'Je sais pas si vous avez déja de récupérer un handle depuis un Controle ActiveX
        'c'est pas gagné, c'est pour cela qu'ici on récupère le Handle d'un composant toujours
        'présent dans windows
        CurrWnd = GetWindow(FindWindow(monSuperHandle, vbNullString), GW_HWNDFIRST)
        While CurrWnd <> 0
        ' On prend la fenetre mere de l'application
        Parent = GetParent(CurrWnd)
        Length = GetWindowTextLength(CurrWnd)
        NomTache = Space$(Length + 1)
        Length = GetWindowText(CurrWnd, NomTache, Length + 1)
        ' Ici on a le nom de la fenetre qui apparait dans la barre du CTRL+ALT+SUPP
        NomTache = Left$(NomTache, Len(NomTache) - 1)
        
        If NomTache <> "" Then
           'récupération d'une partie du nom du processus.
            NomAAR = Left$(NomTache, 14)
            'on recherche un certain processus afin de récupérer son handle
            If NomAAR = "Acrobat Reader" Then
                'on ferme l'application
                  reSultat = PostMessage(CurrWnd, 16, vbNull, vbNull)
            End If
        End If

        CurrWnd = GetWindow(CurrWnd, GW_HWNDNEXT)
        
        DoEvents
        Wend

Else
'estinction du timer
     Timer1.Enabled = False
'fermeture de word
     docword.Application.Quit (0)
End If

End Sub

Conclusion :


Faite Un copier collé dans un nouveau projet Controle ActiveX dans Vb.
Ici j'ai utilisé Vb6

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_drikc
Messages postés
3
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
12 septembre 2006

Pas grave vais chercher pourquoi ça marche sur mon poste et pas les autres.

Merci quand même.
cs_Waldo2188
Messages postés
142
Date d'inscription
jeudi 12 février 2004
Statut
Membre
Dernière intervention
20 mai 2008

Si j'ai bon souvenir, le controle Timer est un objet que l'on retrouve dans le logiciel ActiveX Control Pad,
et celui-ci est utilisé à la ligne 46
45 # 'mise en route du timer
46 # Timer1.Enabled = True
il permet de marquer une pose le temps que la page s'imprime.

je suis désolé de ne pas pouvoir apporter plus de précision, ce code a été fait lors de l'un de mes stage (2005), et depuis celui ci je n'est plus touché au VB.
cs_drikc
Messages postés
3
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
12 septembre 2006

A priori il fonctione avec la sp2, sur mon poste (sp2 + toutes les maj) c'est le seul endroit ou il fonctionne, sur les autres poste la il deconne.

En description tu dis "Au faite vous allé avoir besoin d'un controle Timer... " cad il y a quelque chose a installer?

Bien a toi.
cs_Waldo2188
Messages postés
142
Date d'inscription
jeudi 12 février 2004
Statut
Membre
Dernière intervention
20 mai 2008

Salut,
Franchement aucune idée. Et comme ca fait un moment que je n'est pas touché à ce code, c'est possible qu'il ne fonctionne plus avec XP SP2.
Désolé de ne pas pouvoir t'apporter plus de réponse.
cs_drikc
Messages postés
3
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
12 septembre 2006

Slt,

J'ai un soucis avec ce code, il me fait planter internet explorer, y a t'il des trucs spécifique a installer pour le faire marcher?

Bien à vous.

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.