none
WPF JPG Print sans fenêtre d'impression. RRS feed

  • Question

  • Bonjour.
    Je travaille sur Visual Studio 2013 avec les langages c#/XAML. Mon application WPF récupère le chemin vers une image, et je souhaite ensuite l'imprimer sans passer par la fenêtre d'outils. Il s'agit d'une image qui s'imprime sur une seule page, je la veux en un seul exemplaire... J'aimerais cliquer sur mon bouton, et sortir directement la photo.
    Voici la fonction déclenchée par le clic qui lance l'impression.

            private void btn_print_Click(object sender, RoutedEventArgs e)
            {
                file = "C:\\User\\MesImages\\image.jpg";//chemin d'exemple, je suis sûr que le fichier existe.
    
                //Lance un processus
                System.Diagnostics.ProcessStartInfo myInfo = new System.Diagnostics.ProcessStartInfo(file);
                myInfo.CreateNoWindow = true;
                myInfo.Verb = "Print";
                myInfo.WindowStyle = ProcessWindowStyle.Hidden;
                System.Diagnostics.Process.Start(myInfo);
            }

    J'ai vu qu'il existait également les classes PrintDialog et PrintDocument, mais cela ne semble pas être ce que je recherche.

    Une autre alternative serait la possibilité d'imprimer une image contenue dans une balise <Image /> de mon XAML ou équivalent. Quelqu'un sait si c'est possible et comment faire ?


    mardi 20 mai 2014 13:53

Toutes les réponses

  • Bonjour

    On a déplacé votre thread dans le forum dédié WPF.

    Ici vous avez des exemples d'impression avec WPF:
    http://code.msdn.microsoft.com/windowsdesktop/WPF-Printing-Overview-f28c541a

    Bien cordialement

     



    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mercredi 21 mai 2014 10:18
  • Bonjour,

    Compte tenu de la simplicité du besoin exprimé, je vous propose une solution en mode KISS (Keep It Simple, Stupid http://fr.wikipedia.org/wiki/Principe_KISS) en espérant que ça vous convienne.

    On n'utilise aucune fonctionnalité WPF, on appelle mspaint présent sur toute machine en mode "impression".

    On voit apparaître une fenêtre de progression qui se ferme toute seule et qui indique à l'utilisateur qu'une impression se réalise. Pour ma part, je trouve cela souhaitable en terme d'expérience utilisateur ^^.

    Si cela ne vous va pas, on peut toujours trouver autre chose ;-)

    private void btn_print_Click(object sender, RoutedEventArgs e)
    {
        string file = @"C:\User\MesImages\image.jpg";
    
        //Lance un processus
        System.Diagnostics.Process.Start("mspaint", "/pt " + file);
    }

    Bien cordialement,

    Fabrice JEAN-FRANCOIS

    mercredi 21 mai 2014 11:32
  • Bonjour.
    Merci de votre réponse, cela semble être en effet ce que je veux. Cependant, un problème persiste : Il paraîtrait qu'un problème d'imprimante survienne. "Paper size of printer friver and ink ribbon type do not match.". J'ai Mitsubishi CP-D70-DW, impression sur papier 15*20.
    Faut-il ajouter une ligne pour préciser l'imprimante, le papier, ou autre ?

    mercredi 21 mai 2014 15:06
  • Je dois avouer que l'astuce mspaint a un inconvénient... C'est que cet outil possède peut de fonctionnalités :-D.

    A ma connaissance, il n'y a pas d'autres options que celle d'impression dans mspaint :-/

    Il existe une autre technique d'impression directe, elle fait appel à rundll32 et à l'API Win32 mais ce n'est à mon sens pas très souhaitable dans du code...

    Mais avant de s'aventurer  dans une full implémentation WPF, il faudrait idéalement prendre le problème à l'envers. On souhaite imprimer un document par défaut... Et le message nous indique que le réglage "par défaut", n'est pas bon pour l'imprimante. En effet, la fenêtre de paramétrage d'impression est précisément là pour nous permettre de gérer ce cas de figure. Si l'on s'en débarrasse, alors c'est que nous supposons que notre réglage d'impression par défaut est convenable. Pour vérifier tout cela, il faut ouvrir manuellement MsPaint, charger l'image utilisé dans vos tests, puis demander une impression. Très logiquement, on obtiendra le même message d'erreur.

    Si tel est le cas, cela signifie qu'il nous faut adapter nos paramètres par défaut de l'imprimante. Dans le panneau de configuration, Imprimantes, sous les préférences d'impressions il faut trouver le réglage adéquat, s'il existe, pour que le driver de la Mitsubishi CP-D70-DW imprime comme il faut.

    Si l'impression manuelle via mspaint marche... et que cela ne fonctionne pas dans notre code... c'est qu'il y a un autre pb sur lequel nous pourrons pencher avec grand plaisir ;-)

    Bien cordialement,

    Fabrice JEAN-FRANCOIS

    P.S : Pr info, même avec du code WPF, le problème devrait être le même. A partir du moment où on enlève la fenêtre de paramétrage, c'est la configuration par défaut qui prime.

    mercredi 21 mai 2014 15:54
  • Je vais essayer cela dès que je me remettrais à cette tâche. Les réglages de l'imprimante par défaut me permettent d'imprimer directement (de mémoire), via un clic droit -> imprimer en passant par la fenêtre de dialogue (cliquer sur OK imprime le résultat que j'attends).
    Peut être que cela aura une quelconque influence, mais les impressions sont des impressions de photographies prises par un appareil photo nikon D5300.
    Peut on simuler l'appuie sur le bouton "Ok" de la fenêtre d'impression après son ouverture peut être ?
    Redimensionner la photo prise et la dessiner dans un graphics et utiliser PrintDocument ? J'ai tenté cette méthode mais je n'arrive pas à centrer mon image, sans doute du au peu de temps passer dessus, et aux différentes mesures qui entre en jeu (la taille du papier en pouce, taille de graphique en pixel, d'autres mesures sont en centièmes de pouces, le tout dépendant du DPI, sinon c'est trop facile).

    Edit : J'ai donc essayé de lancer l'impression directement depuis paint, et j'ai d'énormes bordures blanches sur ma photo. J'essaie donc avec un PrintDocument et après de nombreuses mises au point, j'arrive à obtenir à peu près ce que je veux.
    Merci de m'avoir accordé une partie de votre temps.
    mercredi 21 mai 2014 22:35