Page 1 sur 1

[Tuto] AutoIt et les impressions.

Posté : sam. 27 févr. 2010 14:34
par Tlem
AutoIt n'a pratiquement aucune commande interne pour l'impression en dehors de _FilePrint() pour les documents .txt (texte simple) et _WordDocPrint() pour les documents Word.

Suite à plusieurs demandes concernant l'impression avec AutoIt, voici d'autres possibilités qui en intéresserons surement plus d'un ...
  • Bloc notes
    - Imprimer un document texte avec le Bloc-notes sur l'imprimante par défaut (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.txt"
    Run(@SystemDir & '\notepad.exe /p "' & $PFile & '"' ,'' ,@SW_HIDE)
    - Imprimer un document avec le Bloc-notes sur l'imprimante de votre choix (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.txt"
    $Printer = "HP Photosmart 3300 series"
    Run(@SystemDir & '\notepad.exe /pt "' & $PFile & '" "' & $Printer & '"' ,'' ,@SW_HIDE)
    - Il est aussi possible de spécifier le nom du pilote ainsi que le port comme ceci :

    Code : Tout sélectionner

    notepad.exe /pt TextFileName PrinterName [ DriverName [ PortName ] ]
    Ce qui nous donne :

    Code : Tout sélectionner

    $PFile = "C:\test.txt"
    $Printer = "HP LaserJet 1100 (MS)"
    $Driver = "HP LaserJet 1100 (MS)"
    $Port = "IP_192.168.1.10" ; ou $Port = "\\ServeurImpression\usbprinter"
    Run(@SystemDir & '\notepad.exe /pt "' & $PFile & '" "' & $Printer & '" "' & $Driver & '" "' & $Port & '"' ,'' ,@SW_HIDE)
  • WordPad
    - Imprimer un document txt, rtf, doc, wri avec le Wordpad sur l'imprimante par défaut (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.txt"
    Run(@SystemDir & '\write.exe /p "' & $PFile & '"' ,'' ,@SW_HIDE)
    - Imprimer un document txt, rtf, doc, wri avec le Wordpad sur l'imprimante de votre choix (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.txt"
    $Printer = "HP Photosmart 3300 series"
    Run(@SystemDir & '\write.exe /pt "' & $PFile & '" "' & $Printer & '"' ,'' ,@SW_HIDE)
    - Il est aussi possible de spécifier le nom du pilote ainsi que le port comme ceci :

    Code : Tout sélectionner

    write.exe /pt TextFileName PrinterName [ DriverName [ PortName ] ]
  • Word
    - Vous pouvez aussi utiliser Word, mais dans ce cas, vous devrez d'abord importer une macro (à faire une seule fois).
    Créez cette macro :

    Code : Tout sélectionner

    Sub PrintDefault()
    '
    ' PrintDefault Macro
    ' Print current document to Default Printer
    '
        ActiveDocument.PrintOut
        ActiveDocument.Close
        Application.Quit
    End Sub
    et enregistrez là sous "PrintDefault" dans normal.dot.
    - Vous pouvez aussi créer le fichier PrintDefault.bas et l'importer dans le normal.dot.
    ► Afficher le texte
    Une fois la macro crée et importée, utilisez :

    Code : Tout sélectionner

    $PFile = "C:\test.doc"
    Run(@ProgramFilesDir & '\Microsoft Office\Office\winword.exe "' & $PFile & '"  /mPrintDefault /q /n' ,'' ,@SW_HIDE)
    En adaptant la macro, vous pourrez spécifier l'imprimante de destination.
    Je pense qu'il doit être possible avec AutoIt d'intégrer directement les macro sans passer par l'ouverture de Word, mais je vous laisse chercher cette partie. ;)
  • Open Office (pensez à bien contrôler le chemin de l'application) :
    - Imprimer un document avec Open Office sur l'imprimante par défaut (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.odt"
    Run(@ProgramFilesDir & '\OpenOffice.org 3\program\soffice.exe -p "' & $PFile & '"' ,'' ,@SW_HIDE)
    - Imprimer des documents .odt avec Open Office sur l'imprimante par défaut (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\*.odt"
    Run(@ProgramFilesDir & '\OpenOffice.org 3\program\soffice.exe -p "' & $PFile & '"' ,'' ,@SW_HIDE)
    - Imprimer un/des documents avec Open Office sur l'imprimante de votre choix (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.odt"
    $Printer = "HP Photosmart 3300 series"
    Run(@ProgramFilesDir & '\OpenOffice.org 3\program\soffice.exe -pt "' & $Printer & '" "' & $PFile & '"' ,'' ,@SW_HIDE)
  • Adobe Accrobat (pensez à bien contrôler le chemin de l'application) :
    - Imprimer un document avec Adobe Accrobat sur l'imprimante par défaut avec boite de dialogue d'impression :

    Code : Tout sélectionner

    $PFile = "C:\test.pdf"
    Run(@ProgramFilesDir & '\Adobe\Reader 9.0\Reader\AcroRd32.exe /p "' & $PFile & '"' ,'' ,@SW_HIDE)
    - Imprimer un document avec Adobe Accrobat sur l'imprimante de votre choix silencieusement :

    Code : Tout sélectionner

    $PFile = "C:\test.pdf"
    $Printer = "HP Photosmart 3300 series"
    Run(@ProgramFilesDir & '\Adobe\Reader 9.0\Reader\AcroRd32.exe /N /T "' & $PFile & '" "' & $Printer & '"' ,'' ,@SW_HIDE)
    - Il est aussi possible de spécifier le nom du pilote ainsi que le port comme ceci :

    Code : Tout sélectionner

    AcroRd32.exe /N /T PdfFile PrinterName [ PrinterDriver [ PrinterPort ] ]
  • Foxit Reader (pensez à bien contrôler le chemin de l'application) :
    - Imprimer un document avec Foxit Reader sur l'imprimante par défaut (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.pdf"
    Run(@ProgramFilesDir & '\Foxit Software\Foxit Reader\Foxit Reader.exe /p "' & $PFile & '"' ,'' ,@SW_HIDE)
    - Imprimer un document avec Foxit Reader sur l'imprimante de votre choix (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.pdf"
    $Printer = "HP Photosmart 3300 series"
    Run(@ProgramFilesDir & '\Foxit Software\Foxit Reader\Foxit Reader.exe /t "' & $PFile & '" "' & $Printer & '"' ,'' ,@SW_HIDE)
    - Selon le manuel de Foxit Reader il est conseillé pour la version 3.0 de placer les commutateurs /p et /t avant le nom du fichier.

    Si vous avez des images à imprimer alors voici quelques exemples :
  • Paint
    - Imprimer une image avec paint sur l'imprimante par défaut (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.bmp"
    Run(@SystemDir & '\mspaint.exe /p "' & $PFile & '"' ,'' ,@SW_HIDE)
    - Imprimer une image avec paint sur l'imprimante de votre choix (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.bmp"
    $Printer = "HP Photosmart 3300 series"
    Run(@SystemDir '\mspaint.exe /pt "' & $PFile & '" "' & $Printer & '"' ,'' ,@SW_HIDE)
    - Il est aussi possible de spécifier le nom du pilote ainsi que le port comme ceci :

    Code : Tout sélectionner

    mspaint.exe /pt ImageFileName PrinterName [ DriverName [ PortName ] ]
  • IrFanView
    - Imprimer n'importe quelle image avec IrfanView sur l'imprimante par défaut (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.bmp"
    Run(@ProgramFilesDir & '\irfanview\i_view32.exe "' & $PFile & '" /print' ,'' ,@SW_HIDE)
    - Imprimer n'importe quelle image avec IrfanView sur l'imprimante de votre choix (silencieusement) :

    Code : Tout sélectionner

    $PFile = "C:\test.bmp"
    $Printer = "HP Photosmart 3300 series"
    Run(@ProgramFilesDir & '\irfanview\i_view32.exe "' & $PFile & '" /print="' & $Printer & '"' ,'' ,@SW_HIDE)
  • Microsoft RAW Image
    Dans le cas ou vous auriez des images spécifiques à imprimer, vous pouvez aussi utiliser l'utilitaire de Microsoft : Microsoft RAW Image Thumbnailer and Viewer for Windows.
    La ligne de commande est identique à celle de IrFanView, donc il vous suffit d'adapter le chemin au code précédent. ;)

    Code : Tout sélectionner

    RAWSupport.exe /print RawImageFile
  • Microsoft XPS Viewer
    Pour ceux que cela peut intérésser, vous avez aussi Microsoft XPS Viewer :

    Code : Tout sélectionner

    XpsRchVw.exe XpsFile /p
Bien, maintenant que nous pouvons imprimer tout un tas de choses, vous allez me dire : 'Mais comment récupérer la liste de mes imprimantes ainsi que les informations sur les drivers et ports ...'
Et bien tout simplement avec ceci :

Code : Tout sélectionner

#include <array.au3> ; Only for viewing the array.

$aPrinterList = _GetLocalPrinterList()
_ArrayDisplay($aPrinterList, '')

; Return local printer list.
; column 1 = Printer Name
; column 2 = Driver
; column 3 = Port
Func _GetLocalPrinterList()
    Local $PrinterList[1][3], $PrinterCount
    Local $objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\CIMV2")
    Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer")

    For $objItem In $colItems
        ReDim $PrinterList[$PrinterCount + 1][3]
        $PrinterList[$PrinterCount][0] = $objItem.DeviceID
        $PrinterList[$PrinterCount][1] = $objItem.DriverName
        $PrinterList[$PrinterCount][2] = $objItem.PortName
        $PrinterCount += 1
    Next
    Return $PrinterList
EndFunc   ;==>_GetLocalPrinterList
Bon, évidement seul la fonction vous sera utile, mais j'ai préféré vous donner un exemple concret. ;)

J'ai sans aucun doute oublié d'autres programmes commun (dont surement celui que vous voulez :lol: ), mais ce qui est écrit précédemment doit vous aider dans l'adaptation de votre/vos besoin(s).

Donc bon code à tous et amusez vous bien. :D

Re: AutoIt et les impressions.

Posté : sam. 27 févr. 2010 17:46
par jbnh
Honnêtement je pense que tu as fait le tour des programmes principaux. Merci beaucoup en tout cas pour ce partage :)

Re: AutoIt et les impressions.

Posté : dim. 28 févr. 2010 01:14
par timmalos
Thx a lot for this :wink:

Re: AutoIt et les impressions.

Posté : dim. 28 févr. 2010 16:22
par Habibsbib
Merci beaucoup.

Je note juste un oubli de la balise [Tuto], mais autrement merci beaucoup.

Et au fait, la fonction ShellExecute n'en ferait-elle pas autant avec le flag verb "print" ?

Re: [Tuto] AutoIt et les impressions.

Posté : dim. 28 févr. 2010 21:19
par Tlem
Bien vu pour la balise (c'est corrigé). J'ai passé trop de temps dessus et comme je devais partir en famille, je l'ai mis en ligne un peut rapidement ... :oops:

En ce qui concerne ShellExecute et le flag verb "print", cela ne fonctionne pas pour tout les softs. Donc tant qu'à faire un tuto, autant qu'il soit 'uniforme' tout le long. ;)
Si on ne précise pas le flag, alors cela fonctionne (pour certains), le problème c'est le showflag, car pour le spécifier, il faut mettre quelque chose sur le flag verb ...
J'ai essayé : -1, Default, et les différents choix, et à chaque fois le même message d'erreur. Donc je suis passé par le Run() qui lui ne pause aucun problème. ;)

Re: [Tuto] AutoIt et les impressions.

Posté : ven. 02 juil. 2010 16:30
par OmegAMRS
merci c'est niquel :)

a+

OmegA

Re: [Tuto] AutoIt et les impressions.

Posté : mar. 07 sept. 2010 20:26
par TommyDDR
Merci pour ce tuto.

Juste un oubli de frappe :

dans la rubrique Paint :
Run(@SystemDir '\mspaint.exe /pt "' & $PFile & '" "' & $Printer & '"' ,'' ,@SW_HIDE)

et manque un & entre @SystemDir et '\mspaint.exe

Re: [Tuto] AutoIt et les impressions.

Posté : mar. 07 sept. 2010 20:55
par Tlem
Corrigé.
Merci.

Re: [Tuto] AutoIt et les impressions.

Posté : mar. 22 mars 2011 16:33
par albu68
Merci :D