2017-10-19 11 views
0

J'essaie d'imprimer plusieurs documents Word (100 ou plus), chacun avec plusieurs pages une par une en utilisant la méthode document.printout. Tous les documents doivent rester dans la file d'attente d'impression jusqu'à ce que les pages soient ajoutées. Il fonctionne correctement avec quelques documents de moins de 50, mais lorsqu'il est testé avec 80 documents ou plus ayant plusieurs pages, les résultats deviennent incohérents.Impression de plusieurs fichiers Doc dans C# en utilisant document.printout mais il montre un comportement bizarre

J'ai essayé suivante:

boucle à travers tous les documents un par un quand la boucle extrémités fermer alors le mot objet com. Lorsque l'impression est effectuée, il met en file d'attente tous les docs parfaitement et la mise en file d'attente est également effectuée avec succès. Parfois, il met en file d'attente les documents, mais la mise en file d'attente ne se termine jamais et l'instance de mot est également libérée. cela entraîne des documents à manquer lors de l'impression. Veuillez confirmer si je dois continuer à attendre que la mise en file d'attente se termine à l'aide de wordApp.BackgroundPrintingStatus ou que la mise en file d'attente se termine une fois le document envoyé depuis l'application. Selon mon observation, même si je libère le mot com, le spooling d'objets est terminé mais parfois non. Veuillez suggérer? Voici l'extrait de code: var application = new Microsoft.Office.Interop.Word.Application(); essayer {

  foreach (var fileName in fileNames) 
      { 


       if (File.Exists(fileName)) 
       { 
        var _document = application.Documents.Open(fileName); 
        try 
        { 


         object copies = "1"; 
         object pages = ""; 
         object range = Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintAllDocument; 
         object items = Microsoft.Office.Interop.Word.WdPrintOutItem.wdPrintDocumentContent; 
         object pageType = Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages; 
         object oTrue = true; 
         object oFalse = false; 
         object missing = Type.Missing; 
         _document.PrintOut(ref oTrue, ref oFalse, ref range, ref missing, ref missing, ref missing, 
          ref items, ref copies, ref pages, ref pageType, ref oFalse, ref oTrue, 
          ref missing, ref oFalse, ref missing, ref missing, ref missing, ref missing); 



        } 

        catch (Exception ex) 
        { 
         Log(ex); 
        } 
        finally 
        { 
         _document.Close(); 
         _document = null; 

        } 
       } 
      } 

     } 
     catch (Exception ex) 
     { 

      Log(ex); 
     } 
     finally 
     {    

      application.Quit(); 
      Marshal.ReleaseComObject(application); 
      application = null; 
     } 
+0

Pouvez-vous poster un exemple de code qui montre votre approche actuelle? –

+0

Code snipped ajouté dans le message – Rahber1

Répondre

0

Document.printout() attend le premier paramètre à True si vous voulez mettre en arrière-plan et continuer à ajouter des documents. Si vous mettez False, le processus attendra jusqu'à ce que le fichier d'impression soit spoulé dans la file d'attente d'impression.

object oBackground = false; 
... 
_document.PrintOut(ref oBackground, ref oFalse, ref range, ref missing, ref missing, ref missing, 
         ref items, ref copies, ref pages, ref pageType, ref oFalse, ref oTrue, 
         ref missing, ref oFalse, ref missing, ref missing, ref missing, ref missing); 

En outre, il serait mieux si vous faites la fonction sans utiliser la même variable pour plus d'un paramètre (comme oTrue), de sorte que vous pouvez apporter des modifications simples sans affecter plusieurs paramètres:

_document.PrintOut(opBackground , opAppend , opRange , opOutputFileName , opFrom , opTo , opItem , opCopies , opPages , opPageType , opPrintToFile , 
    opCollate , opFileName , opActivePrinterMacGX , opManualDuplexPrint , opPrintZoomColumn , opPrintZoomRow , opPrintZoomPaperWidth , opPrintZoomPaperHeight) 
+0

Merci beaucoup pour vos conseils Igor, ça m'a vraiment aidé. la définition de la propriété background à false semble fonctionner, mais je m'interrogeais sur les exceptions possibles avec document.printout. Que faire si un document ne parvient pas à se dérouler pour une raison quelconque? Si un document échoue pour une raison quelconque, l'autre continuera-t-il? Comment tracer les échecs d'impression? J'ai vérifié la documentation pour le document.printout chez MSDN mais il ne montre aucune exception spécifique avec ceci? – Rahber1