Cuando uso una impresora virtual, ¿cómo puedo verificar que la impresión esté terminada?

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

  •  29-09-2019
  •  | 
  •  

Pregunta

Estoy usando una impresora virtual para imprimir un documento de Word en un archivo de imagen en un programa C#. Hasta ahora todo va bien, excepto que no sé cuándo está terminado el proceso de impresión para poder leer el contenido de la imagen generada. Aquí está mi código:

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);

Entonces, ¿cómo puedo estar seguro de que el procesamiento de impresión está terminado para que pueda continuar y obtener el contenido de la imagen?

¿Fue útil?

Solución

Desafortunadamente, la única forma en que he encontrado verificar el estado de impresión en Word es una de las dos cosas.

  1. Imprima sincrónicamente. Sin embargo, no es genial porque puede colgarlo hasta que se complete la impresión.
  2. Imprima el Doc de manera asincrónica y luego verifique la aplicación.

Algo como esto....

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

No es perfecto, pero funciona.

Tenga en cuenta que esto solo le dirá cuándo está terminado el carrete de Word. Si está hablando de saber cuándo se completa el documento impresión en la impresora, ese es otro problema. Necesitará el JobId impreso y tendrá que consultar las cosas de la bgas de impresora, en las que no pude ayudarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top