IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Agrafer un document de plusieurs pages par programmation ?


Sujet :

VBA Word

  1. #1
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut Agrafer un document de plusieurs pages par programmation ?
    Bonjour,

    Je cherche à agrafer un document de plusieurs pages par programmation, je ne sais pas comment faire pour piloter l'imprimante ?

    J'ai commencé à trouver une première piste via le langage PCL et un fichier de séparation de page :
    To Staple Print Jobs:
    You must use a PJL command instead of a PCL command to indicate stapling to a
    multifunction device. Enclose PJL commands with the XRXbegin and XRXend
    commands. See the PDF reference guides for more information.
    \
    \H1B\L%-12345X
    \L@PJL COMMENT XRXbegin
    \L@PJL COMMENT OID_ATT_FINISHING OID_VAL_FINISHING_STAPLE;
    \L@PJL COMMENT XRXend
    \L@PJL ENTER LANGUAGE=PCL
    \H1B\LE
    \
    Je ne sais pas si il est possible avec Word d'injecter des commandes PCL à l'imprimante ?

    Merci,
    ZiP

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Ce n'est pas Word qui gère les imprimantes mais Windows.
    Le tout est de trouver comment en VBA atteindre ces paramètres.

    Pour le PCL, je ne pense pas que Word peut gérer ce genre de choses.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonsoir,

    J'ai trouvé ça : http://support.microsoft.com/kb/154078

    Je vais essayer de faire un mix des deux !

    Cordialement,
    ZiP

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    C'est pas le driver de l'imprimante.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  5. #5
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonsoir,

    Ce code doit permettre d'envoyer des commandes PCL ou PJL dans mon cas afin d'agrafer les documents sans passer par le driver de l'imprimante. C'est pratique car on est pas lié à un driver en particulier.

    A priori, les commandes PJL doivent précéder les commandes PCL envoyées à l'imprimante lors de l'impression des documents.

    Cordialement,
    ZiP

  6. #6
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour,

    Voici le bout de code en VBA :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    Option Compare Database
    Option Explicit
     
    Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrn As Long) As Long
    Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrn As Long) As Long
    Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrn As Long) As Long
    Private Declare Function OpenPrinter Lib "winspool.drv" Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, pDefault As Any) As Long
    Private Declare Function StartDocPrinter Lib "winspool.drv" Alias "StartDocPrinterA" (ByVal hPrn As Long, ByVal Level As Long, pDocInfo As DOC_INFO_1) As Long
    Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrn As Long) As Long
    Private Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrn As Long, pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
    Private Type DOC_INFO_1
        pDocName As String
        pOutputFile As String
        pDatatype As String
    End Type
    ' RawDataToPrinter - sends binary data directly to a printer
    '
    ' Params:
    '   szPrinterName - NULL terminated string specifying printer name
    '   lpData        - Pointer to raw data bytes
    '   dwCount       - Length of lpData in bytes
    '
    ' Returns: TRUE for success, FALSE for failure.
    '
    Public Function RawDataToPrinter(szPrinterName As String, lpData As String, dwCount As Long) As Boolean
        Dim hPrinter As Long
        Dim DocInfo As DOC_INFO_1
        Dim dwJob As Long
        Dim dwBytesWritten As Long
     
        ' Need a handle to the printer.
        If OpenPrinter(szPrinterName, hPrinter, ByVal 0&) = 0 Then
            RawDataToPrinter = False
            Exit Function
        End If
     
        ' Fill in the structure with info about this "document."
        DocInfo.pDocName = "Agrafage"
        DocInfo.pOutputFile = vbNullString
        DocInfo.pDatatype = "RAW"
     
        ' Inform the spooler the document is beginning.
        dwJob = StartDocPrinter(hPrinter, 1, DocInfo)
        If dwJob = 0 Then
            ClosePrinter (hPrinter)
            RawDataToPrinter = False
            Exit Function
        End If
     
        ' Start a page.
        If StartPagePrinter(hPrinter) = 0 Then
            EndDocPrinter (hPrinter)
            ClosePrinter (hPrinter)
            RawDataToPrinter = False
            Exit Function
        End If
     
        ' Send the data to the printer.
        If WritePrinter(hPrinter, lpData, dwCount, dwBytesWritten) = 0 Then
            EndPagePrinter (hPrinter)
            EndDocPrinter (hPrinter)
            ClosePrinter (hPrinter)
            RawDataToPrinter = False
            Exit Function
        End If
     
        ' End the page.
        If EndPagePrinter(hPrinter) = 0 Then
            EndDocPrinter (hPrinter)
            ClosePrinter (hPrinter)
            RawDataToPrinter = False
            Exit Function
        End If
     
        ' Inform the spooler that the document is ending.
        If EndDocPrinter(hPrinter) = 0 Then
            ClosePrinter (hPrinter)
            RawDataToPrinter = False
            Exit Function
        End If
     
        ' Tidy up the printer handle.
        ClosePrinter (hPrinter)
     
        'Check to see if correct number of bytes were written.
        If dwBytesWritten <> dwCount Then
            RawDataToPrinter = False
            Exit Function
        End If
     
        RawDataToPrinter = True
    End Function
     
    Private Sub Test()
        Dim Texte As String
        Texte = "@PJL SET COPIES = 3" & Chr(13) & Chr(10) & "@PJL SET ORIENTATION = LANDSCAPE" & Chr(13) & Chr(10)
        If RawDataToPrinter("PDFCreator", Texte, Len(Texte)) Then
            MsgBox "OK!"
        Else
            MsgBox "NOK!"
        End If
    End Sub
    Il permet théoriquement d'envoyer des commandes PCL et PJL à l'imprimante...

    Par contre, j'ai testé avec PDFCreator mais ça ne semble pas fonctionner

    La page n'est pas au bon format et je n'ai pas 3 copies...

    J'ai essayé avec cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Texte = Chr(27) & "%-12345X@PJL " & Chr(13) & Chr(10) & "@PJL SET COPIES = 3" & Chr(13) & Chr(10) & "@PJL SET ORIENTATION = LANDSCAPE" & Chr(13) & Chr(10) & Chr(27) & "%-12345X"
    Sans résultat concluant

    Ainsi qu'avec celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Texte = Chr(27) & "%-12345X@PJL JOB" & Chr(13) & Chr(10) & "@PJL ENTER LANGUAGE = PCL" & Chr(13) & Chr(10) & "@PJL SET COPIES = 2" & Chr(13) & Chr(10) & "@PJL EOJ" & Chr(13) & Chr(10) & Chr(27) & "%-12345X"
    Avec cette ligne, l'imprimante me sort une page avec des caractères de type hiéroglyphe !

    ZiP

  7. #7
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour,

    Sur une imprimante laser de marque Brother et de référence HL-5240, il faut envoyer le code PJL suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <ESC>%-12345X@PJL<CR><LF>
    @PJL EXECUTE DEMOPAGE<CR><LF>
    <ESC>%-12345X
    J'envoie donc avec ma fonction RawDataToPrinter le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Texte = Chr(27) & "%-12345X@PJL" & Chr(13) & Chr(10) & "@PJL EXECUTE DEMOPAGE" & Chr(13) & Chr(10) & Chr(27) & "%-12345X"
    Je vois bien passer un job d'impression sur l'imprimante, elle se met en marche et m'imprime une ligne de hiéroglyphes !

    Je ne comprends pas pourquoi elle ne m'interprète pas le code correctement !

    J'ai également essayé avec un fichier Word vierge contenant un champ PRINT avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    { PRINT 27 "%-12345X@PJL" 13 10 "@PJL EXECUTE DEMOPAGE" 13 10 27 "%-12345X" }
    Il m'imprime bien une page, mais celle-ci est vierge, il ne semble donc pas interpréter mon code...

    Avez-vous une idée ?

    Merci,
    ZiP

  8. #8
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    J'ai réussi à sortir la page de configuration avec un fichier *.sep contenant le code suivant et configurer comme séparateur de page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    \
    \H1B\L%-12345X@PJL
    @PJL EXECUTE PRTCONFIG
    J'avance petit à petit...

    J'arrive également à imprimer la page de configuration via un champ PRINT dans Word :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    { PRINT 27 "%-12345X@PJL" 13 10 "@PJL EXECUTE PRTCONFIG" 13 10 }
    ZiP

Discussions similaires

  1. créer un document de plusieurs pages
    Par trolldom dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 31/08/2007, 08h22
  2. Comment créer plusieurs TEdit par programmation?
    Par rebelor dans le forum Delphi
    Réponses: 2
    Dernier message: 02/06/2007, 17h30
  3. Peut-on ouvrir plusieurs pages par une fonction JS
    Par Ashleycole dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 31/05/2007, 15h42
  4. Un document avec plusieurs pages
    Par freud dans le forum SAP Crystal Reports
    Réponses: 8
    Dernier message: 05/01/2007, 10h58
  5. création de plusieurs TEdit par programmation
    Par faten7 dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/04/2006, 21h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo