Lorsque vous utilisez une imprimante virtuelle comment puis-je vérifier que l'impression est terminée?

StackOverflow https://stackoverflow.com/questions/3914880

  •  29-09-2019
  •  | 
  •  

Question

J'utilise une imprimante virtuelle pour imprimer un document Word dans un fichier image dans un programme C #. Jusqu'à présent, tout va bien, sauf que je ne sais pas quand le processus d'impression est terminé pour que je puisse lire le contenu de l'image générée. Voici mon code:

using System;
using Microsoft.Office.Interop.Word;
using Word=Microsoft.Office.Interop.Word;

var app = new ApplicationClass();
object filename = "C:\\ad.doc";
var missing = Type.Missing;
var doc = app.Documents.Open(ref filename, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
var oldPrinter = app.ActivePrinter;
app.ActivePrinter = "Name of printer";
object outputFileName = "c:\\ad.tif";
object trueValue = true;
object falseValue = false;

doc.PrintOut(ref trueValue, ref falseValue, ref missing, ref outputFileName, ref missing, ref missing,
                             ref missing, ref missing, ref missing, ref missing, ref trueValue, ref missing, ref missing,
                             ref missing, ref missing, ref missing, ref missing, ref missing);


app.ActivePrinter=oldPrinter ;                
doc.Close(ref missing, ref missing, ref missing);
app.Quit(ref missing, ref missing, ref missing);

Alors, comment puis-je être sûr que le traitement d'impression est terminée pour que je puisse continuer et obtenir le contenu de l'image?

Était-ce utile?

La solution

Malheureusement, la seule façon que j'ai trouvé pour vérifier l'état de l'impression en mot est l'une des deux choses.

  1. Imprimer de manière synchrone. Pas grand bien parce que ça va peut vous accrocher jusqu'à ce que l'impression est terminée.
  2. Imprimer la doc de manière asynchrone, puis vérifiez la APPLICATION.BACKGROUNDPRINTINGSTATUS propriété dans une boucle ou sur un thread de travail de fond jusqu'à ce qu'il devienne en continu 0 (pas plus impression) ou vous frapper un délai d'attente chien de garde

Quelque chose comme ça ....

        Do Until _Doc.Application.BackgroundPrintingStatus = 0
            System.Windows.Forms.Application.DoEvents()
            System.Threading.Thread.Sleep(750)
        Loop

Pas parfait, mais il fonctionne.

Notez que cela ne vous dira quand son spool fini de mot. Si vous parlez de savoir quand le document est effectivement terminé l'impression sur l'imprimante, qui est une toute autre question. Vous aurez besoin de l'impression et doivent ID de tâche d'interroger les trucs de spooler d'imprimante, que je ne pouvais pas vous aider sur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top