none
Problèmes avec impressions de plusieurs doc WORD. RRS feed

  • Question

  • Bonjour,

    Grace à la dll Microsoft.Interop.Word, je peux actuellement imprimer silencieusement un doc Word sur mon serveur applicatif.

     

    try
            {
              // Declaring the object variables we will need later
              object varFileName = @"C:\test.doc";
              object varFalseValue = false;
              object varTrueValue = true;
              object varMissing = Type.Missing;
              string varText;
    
              // Create a reference to Microsoft Word application
              Microsoft.Office.Interop.Word.Application varWord =
                new Microsoft.Office.Interop.Word.Application();
    
              varWord.ActivePrinter = @"\\MyPrint";
              // Creates a reference to a Word document
              Microsoft.Office.Interop.Word.Document varDoc =
                varWord.Documents.Open(ref varFileName, ref varMissing,
                  ref varTrueValue,
                  ref varMissing, ref varMissing, ref varMissing, ref varMissing,
                  ref varMissing, ref varMissing, ref varMissing,
                  ref varMissing, ref varMissing, ref varMissing, ref varMissing,
                  ref varMissing, ref varMissing);
    
              varWord.Visible = false ;
    
              varDoc.PrintOut(ref varTrueValue, ref varFalseValue, ref varMissing,
                  ref varMissing, ref varMissing, ref varMissing,
                  ref varMissing, ref varMissing, ref varMissing, ref varMissing,
                  ref varFalseValue, ref varMissing, ref varMissing,
                  ref varMissing, ref varMissing, ref varMissing, ref varMissing,
                  ref varMissing);
    
              varDoc.Close();
              varWord.Quit();
            }
            catch (Exception varE)
            {
    
            }
    

    Mais maintenant j'aimerais imprimer l'ensemble des docs word se trouvant dans un répertoire.

    Or en rappelant immédiatement cette fonction avec un autre fichier, je rencontre le problème suivant :

    Word s'ouvre avec les lessage d'erreur :

    Le fichier c:\... \AppData\...\Modeles\Normal.dot est déjà ouvert en lecture seul.

    l'aide en ligne précise que le fichier est ouvert en lecture seul ou Une autre application a verrouillé le fichier en mode exclusif.

    L'impression se fait correctement mais ne se fait plus de façon silencieuse à cause de ces erreurs Words.

    Une solution trouvée est de mettre un Thread.Sleep(1000); pour laisser le temps, je suppose, à Word de se fermer.

     

    J'aimerais donc savoir s'il était possible d'éviter cette solution de Thread.Sleep.

    Je vous remercie d'avance.

     

    mardi 26 octobre 2010 12:38

Réponses

  • Bonjour,

     

    merci pour vos précisions.

    Pour le moment j'ai développé une solution me permettant de détecter quand le document était imprimé en me basant sur le projet

    http://printqueuewatch.codeplex.com/ .

    En modifiant le code source, j'ai réussi à transformer le composant en dll. Je ferme donc Word lors de la réception de l'event PrintJob.Deleted

     

    Je garde néanmoins votre solution de coté pour la tester et voir laquelle est la plus performante.


     

    • Marqué comme réponse Alex Petrescu vendredi 29 octobre 2010 09:05
    jeudi 28 octobre 2010 12:59

Toutes les réponses

  • Bonjour,

    Même si cela marche, je n'aime pas la solution du thread.Sleep qui me semble bien trop aléatoire....

    Avez-vous essayé de ne pas fermé Word entre deux impressions?

    (cad executer le varWord.Quit() après l'impression de tous les docs)

    A bientôt,


    Kind regards, Sebastien G. - Axiomtek Deutschland GmbH
    mercredi 27 octobre 2010 05:14
  • Bonjour,

     

    merci pour vos précisions.

    Pour le moment j'ai développé une solution me permettant de détecter quand le document était imprimé en me basant sur le projet

    http://printqueuewatch.codeplex.com/ .

    En modifiant le code source, j'ai réussi à transformer le composant en dll. Je ferme donc Word lors de la réception de l'event PrintJob.Deleted

     

    Je garde néanmoins votre solution de coté pour la tester et voir laquelle est la plus performante.


     

    • Marqué comme réponse Alex Petrescu vendredi 29 octobre 2010 09:05
    jeudi 28 octobre 2010 12:59
  • Bonjour,

    Il sera beaucoup plus rapide de commencer le chargement et l'impression du document suivant sur le même évènement, plutôt que de fermer word et de le réouvrir, même si il reste partiellement en cache...

    Cordialement,


    Kind regards, Sebastien G. - Axiomtek Deutschland GmbH
    jeudi 28 octobre 2010 13:01
  • Bonjour,

     

    Bizet73, je vous remercie de nous tenir au courant avec les résultats de vos testes sur la performance de ces solutions.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    vendredi 29 octobre 2010 09:05
  • Bonjour,

     

    je viens d'effectuer qques tests sur une vingtaine de fichiers et la conclusion est qu'il est deux à trois fois plus rapide de ne pas rouvrir une instance de Word à chaque fois.

    J'ai donc opté pour une solution fermant l'application une fois la tache effectuée en chargeant à chaque fois le document.

    Par contre en passant par une imprimante "PdfCreator", "Microsoft XPS Document Writer" le chargement du document suivant empeche régulièrement l'impression du document précédent ayant pour conséquence la création d'un fichier vide.

    J'ai fait des tests sur une "vraie" imprimante et ce problème ne semble plus avoir lieu, mais j'avoue ne pas avoir testé avec un document de 150 pages suivi d'un document d'une page.

     

    vendredi 29 octobre 2010 13:15