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

Windows Forms Discussion :

[C#] Problème d'impression en échelle de gris


Sujet :

Windows Forms

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut [C#] Problème d'impression en échelle de gris
    Bonjour,

    J'ai besoin dans un programme d'imprimer des pages en monochrome et d'autres en couleurs.

    Toutes mes impressions fonctionnent correctement (changement d'orientation en fonction du type de pages etc), SAUF la commutation monochrome/couleur.

    Par exemple, si je configure mon imprimante en couleurs, elle reste en couleurs, même si j'écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printDoc.DefaultPageSettings.Color = false;
    dans ma routine d'initialisation de l'impression, et ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    e.PageSettings.Color = false;
    dans mon événement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private void printDoc_QueryPageSettings(object sender, QueryPageSettingsEventArgs e)
    et évidemment le contraire également : si l'imprimante est configurée en monochrome, impossible de repasser en couleurs.

    Par contre, ce qui est complètement curieux, c'est que si, dans mon programme, via un printdialog, j'affecte la couleur on non, ça fonctionne, et c'est mémorisé durant la session du programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
                printDialogMDI.PrinterSettings = printer;                   // affecter l'imprimante en cours d'utilisation
                                                                            // (par référence, sera modifiée par le printdialog
                if (printDialogMDI.ShowDialog() == DialogResult.OK)         // boîte de dialogue de recherche d'imprimante
                {                                                           // si confirmation
                    printer = printDialogMDI.PrinterSettings;               // sélectionner l'imprimante
                    Prefs.PrinterName = printer.PrinterName;                // mémoriser son nom
                    Prefs.Save();                                           // sauver les préférences
                }
    Dans ma routine d'impression, j'affecte au printdocument l'imprimante "printer", et ça, ça fonctionne, les choix sont respectés/

    Bref, lorsque je réouvre le printdialog, il m'indique bien mon dernier choix (couleur ou gris). L'information est donc bien mémorisée quelque part, mais je ne trouve pas où (le printer.DefaultPageSettings.color reste toujours à la valeur de l'imprimante par défaut et ne change pas en fonction de ce qu'on choisit dans le printdialog).

    Dit autrement : si je change via le printdialog, ça fonctionne, mais le printersettings me renvoie toujours la valeur par défaut de cette imprimante, et ça ne fonctionne que durant la session en cours.

    Par contre, impossible de changer le mode couleur/gris sans passer par le dit printdialog, et donc impossible d'imprimer une page en couleur et une autre en gris.

    Dans le msdn et tous les exemples trouvés, on indique que la propriété "color" suffit à changer le mode, mais ça ne fonctionne pas (imprimante laser couleur Samsung CLP-300N).

    Quelqu'un a une idée?

    Merci d'avance, parce que ça me coince.

    Claude

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Complément d'information.

    Mon imprimante par défaut a comme propriété par défaut :

    Mode portrait
    Impression couleur

    Si avant d'appeler mon PrintDialog, j'écris les lignes suivantes (printer est le PrinterSetting de l'imprimante) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                printer.DefaultPageSettings.Landscape = true; // forcer paysage
                printer.DefaultPageSettings.Color = false;  // forcer noir et blanc
                printDialogMDI.PrinterSettings = printer;  // affecter les paramètres au printDialog
    Au moment d'ouvrir le printDialog "printDialogMDI", je constate que mon imprimante est bien passée en mode "paysage", mais par contre elle est restée en couleur.

    Bref, à quelqu'endroit où je tente de modifier "color", ça reste sans effet, SAUF lorsque je fais la modification :
    - Soit dans les paramètres par défaut de l'imprimante
    - Soit lorsque je fais la modif dans le printdialog.

    Le problème dans le second cas c'est que j'ai beau regarder le printersetting renvoyé, rien ne change que je sois en couleur ou en noir et blanc (Color reste à true). Par contre, landscape change correctement.

    Donc, le changement couleur/noir et blanc est bien forcé par un printdialog, mais n'a rien à voir avec la propriété "color".

    J'attrape mal la tête

    J'espère qu'il y a un spécialiste ici capable de m'aider, je soupçonne un bug quelque part (driver ou framework).

    Ma question reste donc : comment forcer l'impression noir et blanc par software sans lancer un printdialog?

    Claude

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Salut
    -----

    Bon, manifestement ce n'est pas facile d'avoir des réponses sur les questions d'impression : on trouve plein de questions sur le net, mais pratiquement aucune réponse.

    Je rapporte mon expérience si ça peut servir à d'autres :

    J'ai fait des essais, et d'après ce que j'ai constaté :

    Le mode couleur/gris est bien sauvegardé dans les PrinterSettings (j'ai fait des clones des PrinterSettings, et selon que je renvoie l'un ou l'autre comme paramètre du printDialog, il m'affiche couleur ou gris par défaut dans les propriétés) : l'information s'y trouve donc bien, bien que "color" reste toujours à true.

    Par contre, ce paramètre semble être sauvé dans les tableaux d'octets mis à disposition par PrinterSettings, tableaux qui contiennent également les paramètres "draft" et autres paramètres propres à chaque imprimante et non repris explicitement dans PrinterSettings, mais PAS dans le paramètre "color".

    Ma conclusion est que le software du driver a "oublié" de reporter l'information dans la propriété "color", aussi bien en lecture qu'en écriture.

    Moralité, cette propriété n'agit pas car n'est pas liée à la valeur concernée dans le tableau d'octets, c'est donc un oubli (bug) de l'auteur du driver de l'imprimante.

    Après avoir trouvé d'autres utilisateurs avec d'autres imprimantes qui souffrent de ce problème, je dirais donc que :

    - La propriété "color" agit si le driver a été correctement écrit en respectant la lecture/écriture de cette propriété, mais qu'elle n'a aucun effet dans le cas où le driver gère en interne cette valeur sans prendre la peine de faire un lien vers la propriété en question.

    Donc, "color" agit ou non selon le driver de l'imprimante. Ca ne fonctionne pas sur une couleur laser Samsung CLP-300, et apparemment pas non plus pour une partie des imprimantes HP.

    A toutes fins utiles.

    Claude

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/09/2012, 15h11
  2. [PowerBuilder] Problème d'impression datawindow composite
    Par jpdar dans le forum Powerbuilder
    Réponses: 2
    Dernier message: 17/05/2005, 13h33
  3. Réponses: 16
    Dernier message: 17/03/2005, 13h54
  4. [Rave] problème d'impression
    Par romstarr dans le forum Rave
    Réponses: 2
    Dernier message: 09/06/2004, 15h48
  5. Problème d'impression
    Par IngBen dans le forum C++Builder
    Réponses: 7
    Dernier message: 22/05/2002, 11h37

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