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 Access Discussion :

Imprimer dans un fichier PRN via une API ?


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Imprimer dans un fichier PRN via une API ?
    Bonjour,

    Savez-vous si il est possible d'imprimer dans un fichier *.PRN via une API ?

    Merci,
    ZiP

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    La fonction qui lance l'impression d'un DC est StartDoc, voir l'exemple de code d'impression de MSDN (tu peux ne conserver que le nécessaire ...). Si tu veux imprimer dans un fichier, spécifie tout simplement le nom du fichier dans le membre lpszOutput de ta structure DOCINFO. L'extension communément utilisée (puisque c'est l'extension utilisée par Windows) est .prn mais ce n'est pas l'extension qui est le plus important, mais le contenu du fichier.

  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
    Merci, je vais explorer cette piste !

    ZiP

  4. #4
    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 Melem,

    J'ai besoin d'utiliser pour StartDoc :
    Cependant, il ne semble pas exister en VBA (Access 97) !

    Connaissez-vous un équivalent VBA ?

    Merci,
    ZiP

  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
    J'ai avancé dans mes recherches !

    J'ai un code VBA qui me passe un .doc en .prn :
    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
     
    Option Compare Database
    Option Explicit
     
    Private Sub Test()
        ImprimerDOCDansPRN "Brother HL-5240 series", "C:\Temp\Test.doc", "C:\Temp\Test.prn"
    End Sub
     
    Private Sub ImprimerDOCDansPRN(Imprimante As String, FichierDOC As String, FichierPRN As String)
        Dim WordApp As Word.Application
        Dim WordDoc As Word.Document
        Dim hwnd As Long
        Dim iii As Long
        Dim lObjhWnd As Long
     
        Set WordApp = CreateObject("Word.Application")
        WordApp.Visible = True
        WordApp.ActivePrinter = Imprimante
        Set WordDoc = WordApp.Documents.Open(FichierDOC, ReadOnly:=True)
        WordApp.PrintOut PrintToFile:=True, OutputFileName:=FichierPRN
        WordDoc.Close
        WordApp.Quit
     
        Set WordDoc = Nothing
        Set WordApp = Nothing
    End Sub
    Je voudrais pouvoir le faire pour toutes les applications...

    J'ai donc commencé à développer un bout de code :
    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
     
    Option Compare Database
    Option Explicit
     
    Const CCDEVICENAME = 32
    Const CCFORMNAME = 32
     
    Private Type DOCINFO
            cbSize As Long
            lpszDocName As String
            lpszOutput As String
            lpszDatatype As String
            fwType As Long
    End Type
     
    Private Type DEVMODE
        dmDeviceName As String * CCDEVICENAME
        dmSpecVersion As Integer
        dmDriverVersion As Integer
        dmSize As Integer
        dmDriverExtra As Integer
        dmFields As Long
        dmOrientation As Integer
        dmPaperSize As Integer
        dmPaperLength As Integer
        dmPaperWidth As Integer
        dmScale As Integer
        dmCopies As Integer
        dmDefaultSource As Integer
        dmPrintQuality As Integer
        dmColor As Integer
        dmDuplex As Integer
        dmYResolution As Integer
        dmTTOption As Integer
        dmCollate As Integer
        dmFormName As String * CCFORMNAME
        dmUnusedPadding As Integer
        dmBitsPerPel As Integer
        dmPelsWidth As Long
        dmPelsHeight As Long
        dmDisplayFlags As Long
        dmDisplayFrequency As Long
    End Type
     
    Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, lpInitData As Any) As Long
    Declare Function EndDoc Lib "gdi32" (ByVal hdc As Long) As Long
    Declare Function StartDoc Lib "gdi32" Alias "StartDocA" (ByVal hdc As Long, lpdi As DOCINFO) As Long
     
    Private Sub ImprimerPRN(Imprimante As String, FichierEntree As String, FichierSortie As String)
        Dim DI As DOCINFO
        Dim PrinterDC As Long
     
        ' On renseigne notre structure DOCINFO
        DI.cbSize = Len(DI)
        DI.lpszDocName = "MonJob"
        DI.lpszOutput = FichierSortie
        DI.lpszDatatype = vbNullString
     
        PrinterDC = CreateDC(vbNullString, Imprimante, vbNullString, ByVal 0&)
     
        ' On commence un job
        Call StartDoc(PrinterDC, DI)
     
        ' On commence une page
        'Call StartPage(PrinterDC)
     
        ' ici on ajoute les data...
     
        ' On termine une page
        'Call EndPage(PrinterDC)
     
        ' On termine le job
        Call EndDoc(PrinterDC)
    End Sub
     
    Private Sub Test()
        ImprimerPRN "Brother HL-5240 series", "C:\Temp\Test.doc", "C:\Temp\Test.prn"
    End Sub
    Mais je ne sais pas comment prendre en compte mon document...

    Peut-être que ma méthode n'est pas la bonne, en connaissez-vous une meilleure ?

    Je voudrais imprimer tous les documents (*.doc, *.pdf, *.jpg, etc.) sous forme de fichier *.prn.
    L'information semble stockée dans la structure DOCINFO (lpszOutput) et utilisée par StartDoc.
    Je ne sais pas comment donner cette information à l'imprimante au moment de l'impression des documents.

    Merci,
    ZiP

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/12/2012, 09h47
  2. Réponses: 8
    Dernier message: 18/01/2012, 14h16
  3. [Toutes versions] Charger plusieurs xvm dans un fichier modèle via une liste déroulante en vba
    Par eristote dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/08/2011, 09h10
  4. Réponses: 4
    Dernier message: 25/01/2010, 16h07
  5. Réponses: 45
    Dernier message: 14/02/2008, 15h41

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