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

C# Discussion :

Imprimer via process


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de bobjoumi
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Par défaut Imprimer via process
    Bonjour je dois imprimer des documents PDF a partir de mon application.
    pour cela j'utilise cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [DllImport("shell32.dll")]
    private static extern int ShellExecuteA(IntPtr hwnd, string operation, string file, string paramters, string directory, int showcmd);
     
    private void Print()
    {
         if (_filename != null)
         { ShellExecuteA(IntPtr.Zero, "print", _filename, null, null, 0); }
    }
    A partir de la, aucun problème, il ouvre brièvement adobe et lance l'impression dans la foulé.

    Seulement il ne me demande pas l'imprimante et lance sur celle par défaut.
    Alors pour détourné cela je change l'imprimante par défaut juste avant ce cette manière :

    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
     
    [DllImport("winspool.drv", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool SetDefaultPrinter(string Name);
     
    public static void change(string printer)
    {
         SetDefaultPrinter(printer);
    }
     
    if (printDlg.ShowDialog() == DialogResult.OK)
    {
        change(printDlg.PrinterSettings.PrinterName);
    //////////////////////////
        Print();
    //////////////////////////
    }
    Avant sa je récupère l'imprimante par défaut actuel pour la remétre après mon traitement.

    De cette façon je permet a l'utilisateur de choisir son imprimante, mais le problème est le suivant :
    Quand je laisse l'imprimante par défaut, pas de problème !
    Quand je choisie une autre imprimante, il continue a imprimé sur la dernière?!?!
    Pourtant l'imprimante par défaut change bien
    En recommencent un nombre aléatoire de fois l'impression se fait bien sur celle que je veux. Après je veux retenter sur celle par défaut et il imprime sur la dernière malgrés que se soit pas celle par defaut

    je me suis aperçus d'une chose en mode debug : l'impression ne s'exécute pas juste après "Print();" mais une ou deux ligne après...

    pouvez vous m'aider svp? je ne comprend vraiment pas!
    merci d'avance

  2. #2
    Membre confirmé

    Inscrit en
    Novembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Novembre 2007
    Messages : 197
    Par défaut
    Je m'avance peut-être, mais c'est probablement une question de thread. Ton impression est lancé mais ton application se poursuit quand même. Il faudrait peut-être regarder à synchroniser tout sa !

  3. #3
    Membre confirmé Avatar de bobjoumi
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Par défaut
    Mon application est un moteur d'impression, je vais dans une bdd pour avoir une liste de document a imprimer et je les imprime un a un en bouclant sur un dataset. pour évité qu'un document écrase l'autre j'utilise les thread de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            public void Print_Simple()
            {
                Thread tache = new Thread(Print);
                tache.Start();
            }
    si je ne fais pas sa, mon application beug méchamment quand arrive le tour du second document.

  4. #4
    Membre confirmé Avatar de bobjoumi
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Par défaut
    Bon! je n'est pas encore trouvé de solution pour le problème initial par contre je me permet de remonter le sujet pour vous faire part d'un problème parallèle.

    Aujourd'hui je n'affiche plus de PrintDialog mais j'en est codée un moi même :



    Je récupère la liste des imprimantes, leur états et je peu afficher leur configuration avec le bouton "Propriétés" :



    En validant les paramètres j'arrive a récupéré le nombre de copies et à m'en servir dans une simple boucle pour mon moteur d'impression.

    Cependant quand je modifie le paramètre Duplex pour le recto/verso, j'arrive à récupéré ce paramètre, mais quand je lance l'impression elle se fait en simplex et et je ne vois pas comment utiliser ce paramètre pour que sa fonctionne.

    Merci de votre aides.

  5. #5
    Membre confirmé Avatar de bobjoumi
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Par défaut Incertitude
    Je ne sais pas si ce que je demande est trot compliqué ou au contraire tellement simple que personne ne se donne la peine de répondre...
    J'espère que la cause est plutôt le manque d'explication de ma part

    Néanmoins, je reste complétement perdu est un simple indice serait le bienvenue.

    Si quelqu'un a une idée pouvez vous me dire si dans le code suivant, je peut specifier recto/verso?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void Print()
    {
         if (_filename != null)
         { ShellExecuteA(IntPtr.Zero, "print", _filename, null, null, 0); }
    }

  6. #6
    Membre averti
    Inscrit en
    Août 2006
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 56
    Par défaut
    bonjour

    essaye avec des objets PrintDocument

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. imprimer via le spool windows ?
    Par rimas2009 dans le forum Documents
    Réponses: 3
    Dernier message: 30/07/2009, 17h42
  2. Commande LPR via Process
    Par plutonium719 dans le forum Langage
    Réponses: 1
    Dernier message: 16/03/2009, 15h59
  3. Imprimer via Cups ?
    Par clampin dans le forum C
    Réponses: 5
    Dernier message: 18/08/2008, 15h55
  4. Aperçu d'un document avant de l'imprimer via PHP
    Par c moi dans le forum Langage
    Réponses: 4
    Dernier message: 11/07/2007, 23h05

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