Programmer une résolution d'imprimante.

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
cnormal
Messages : 9
Inscription : mar. 16/sept./2008 21:30

Programmer une résolution d'imprimante.

Message par cnormal »

Bonjour,
Si c'est possible avec PureBasic, quel est le code complet à faire pour programmer automatiquement une résolution d'imprimante.
Par exemple: initialement mon imprimante par défaut à une basse résolution de 120 PPP, comment piloter automatiquement l'imprimante avec le programme pour avoir une plus haute résolution.

J'ai trouvé que ce programme pour avoir l'information de la résolution de l'imprimante mais pas pour piloter la résolution de l'imprimante.

PrinterDC.L = DefaultPrinter()
If PrinterDC
Debug "Horizontale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSX)) + " DPI"
Debug "Vertikale Auflösung = " + Str(GetDeviceCaps_(PrinterDC, #LOGPIXELSY)) + " DPI"
EndIf

Cordialement.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Programmer une résolution d'imprimante.

Message par Backup »

t'as essayé s'il existe une Api SetDeviceCaps_() ??
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Programmer une résolution d'imprimante.

Message par kernadec »

bonjour cnormal
comme vous, Je n'ai pas réussi.
Après avoir testé sans succès des code sources de "codearchiv".
Et ce code auquel j'ai ajouté en début quelques constantes de la structure DEVMODE
avec cette ligne de code et le paramètre de qualité d'impression, mais rien ????

Code : Tout sélectionner

devin(0)\dmPrintQuality = #DMRES_DRAFT    ; PrintQuality 
mon imprimante c'est "Canon IP4300" pour info..

Voila l'extrait de "codearchiv" :
cordialement

Code : Tout sélectionner

; German forum: 
; Author: Andreas 
; Date: 04. December 2002 
; OS: Windows 
; Demo: No 
#NULLPTR = 0 
;Constants For DEVMODE 
#CCHDEVICENAME = 32 
#CCHFORMNAME = 32 
;Constants For DocumentProperties 
#DM_MODIFY = 8 
#DM_COPY = 2 
#DM_IN_BUFFER = 8 ;DM_MODIFY 
#DM_OUT_BUFFER = 2 ;DM_COPY 
;Constants For dmOrientation 
#DMORIENT_PORTRAIT = 1 
#DMORIENT_LANDSCAPE = 2 
;Constants For dmPrintQuality 
#DMRES_DRAFT = (-1) 
#MRES_HIGH = (-4) 
#DMRES_LOW = (-2) 
#DMRES_MEDIUM = (-3) 
;Constants For dmTTOption 
#DMTT_BITMAP = 1 
#DMTT_DOWNLOAD = 2 
#DMTT_DOWNLOAD_OUTLINE = 4 
#DMTT_SUBDEV = 3 
;Constants For dmColor 
#DMCOLOR_COLOR = 2 
#DMCOLOR_MONOCHROME = 1 
;Constants For dmCollate 
#DMCOLLATE_FALSE = 0 
#DMCOLLATE_TRUE = 1 
;#DM_COLLATE = &H8000 
;Constants For dmDuplex 
;#DM_DUPLEX = &H1000& 
#DMDUP_HORIZONTAL = 3 
#DMDUP_SIMPLEX = 1 
#DMDUP_VERTICAL = 2 
 
 
;Standardrucker-Namen ermitteln 
STDPrinterName$ = Space(260) 
GetPrivateProfileString_("WINDOWS","DEVICE","", @STDPrintername$, 260, "Win.Ini") 
STDPrintername$ = StringField(STDPrintername$, 1,",") 
 
PrinterHandle.l = 0 
OpenPrinter_(StdPrintername$,@PrinterHandle.l,0) 
;MessageRequester("",Str(PrinterHandle),0) 
 
Dim DevIn.DEVMODE(0) 
Dim DevOut.DEVMODE(0) 
DocumentProperties_(0,Printerhandle,StdPrintername$,DevIn(0),DevOut(0),#DM_OUT_BUFFER|#DM_IN_BUFFER) 
ClosePrinter_(PrinterHandle) 
 
If DevIn(0)\dmOrientation = 1 
 MessageRequester("aktuelle Einstellung","Hochformat",0) 
ElseIf DevIn(0)\dmOrientation = 2 
 MessageRequester("aktuelle Einstellung","Querformat",0) 
EndIf 
 

devin(0)\dmPrintQuality = #DMRES_DRAFT    ; PrintQuality 



DevIn(0)\dmOrientation = 2;auf Querdruck setzen 
PrinterDC.l = CreateDC_("WINSPOOL",StdPrintername$,0,DevIn(0)) 
 
DocInf.DOCINFO 
DocInf\cbSize = SizeOf(DOCINFO) 
DocInf\lpszDocName = @"Mein Dok" 
DocInf\lpszOutput = #Null 
 
If StartDoc_(PrinterDC,@DocInf) > 0 
 If StartPage_(PrinterDC) > 0 
  TextOut_(PrinterDC,60,70,"Querdruck",9) 
  EndPage_(PrinterDC) 
  EndDoc_(PrinterDC) 
 EndIf 
EndIf 
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Programmer une résolution d'imprimante.

Message par Ulix »

De mémoire 4 résolutions sont dispo :

#DMRES_HIGH : haute résolution
#DMRES_MEDIUM : normal
#DMRES_LOW : basse résolution
#DMRES_DRAFT : dite brouillon


Je reconnais que c'est la "le 5 lettre" a gérer :oops: . Depuis que l'on demande quelques améliorations !! :twisted:
Je te conseil d'utilisé une lib, pour ma part j'utilise : Printer_Lib, tu trouvera quasiment tous les instructions pour faire les impréssions.
Seul point noir : Uniquement sous Windows, a noter que les sources sont fournis cela vaut le coup d'oeil ! :wink:
cnormal
Messages : 9
Inscription : mar. 16/sept./2008 21:30

Re: Programmer une résolution d'imprimante.

Message par cnormal »

Grand merci pour vos réponses,
Je vais essayer sur tes conseils Printer_Lib que j'ai installé, (mais l'aide jointe est incomplète la page m'indique que "Navigation vers page Web annulée", il n'y a que les fonctions de commandes et il n'y a pas d'exemple concernant les commandes de résolution d'imprimante), j'aimerais un exemple de code pour activer les commande des constantes:
#DMRES_HIGH
#DMRES_MEDIUM
#DMRES_LOW
#DMRES_DRAFT
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Re: Programmer une résolution d'imprimante.

Message par Ulix »

Regarde dans l'aide a la fonction Print_OpenPrinter(), il y a la liste de toutes les options et constante a utilisé,
tu trouvera pour la façon d'utilisé la résolution ! :lol:

Dans les exemples, tu trouvera des codes pour mieux comprendre.

Dans : "Example01 OpenPrinter.pb", tu trouvera ce code :

Code : Tout sélectionner

OPT$="Orientation=" + Str(#DMORIENT_PORTRAIT) + ","
OPT$+"Papersize="   + Str(#DMPAPER_A4)
If Print_OpenPrinter("",OPT$)
......
Modifie les lignes comme suit, pour rajouter la résolution :

Code : Tout sélectionner

OPT$="Orientation=" + Str(#DMORIENT_PORTRAIT) + ","
OPT$+"Papersize="   + Str(#DMPAPER_A4)+ ","     (ici ajouter "+",")
OPT$+"PrintQuality="   + Str(#DMRES_HIGH)         (ici ajouter la ligne de la résolution) 
etc....
Voilà c'est relativement simple, :P et surtout n'hésite pas a regarde les sources, c'est très instructif ! :idea:

A+
cnormal
Messages : 9
Inscription : mar. 16/sept./2008 21:30

Re: Programmer une résolution d'imprimante.

Message par cnormal »

Merci pour l'indication du format sauf erreur dans le code, j'ai testé l'exemple ci-dessous. L'impression est correct, le texte se trouve bien avec les coordonnées X,Y en mm en Arial, l'imprimante en mode initial 720 x 720 DPI (Epson Stylus D92), ne passe pas en mode DRAFT (120 x 120 DPI) et inversement non plus.
L'aide du fichier Printer_Lib.chm s'affiche bien dans l'aide externe de l'IDE mais n'affiche pas les syntaxes et descritions. J'ai quand même réussi l'accès en le décompressant avec 7-Zip.

Code:

OPT$="Orientation=" + Str(#DMORIENT_PORTRAIT) + ","
OPT$+"Papersize=" + Str(#DMPAPER_A4) + ","
OPT$+"Printquality="+Str(#DMRES_DRAFT)

If Print_OpenPrinter("",OPT$)
If Print_StartPrinting("Test")
Print_Font("Arial",12)
Print_SetUnits(#PRINT_MM)
Print_Text(20 ,15,"Valeurs: "+OPT$)

Print_StopPrinting()
Else
err$=Print_GetLastError()
MessageRequester("Print_StartPrinting()",err$,0)
EndIf
Else
err$=Print_GetLastError()
MessageRequester("Print_OpenPrinter()",err$,0)
EndIf
Répondre