Quando si utilizza una stampante virtuale come posso verificare che la stampa sia finita?

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

  •  29-09-2019
  •  | 
  •  

Domanda

Sto usando una stampante virtuale per stampare un documento Word in un file di immagine in un programma C#. Finora va tutto bene, tranne per il fatto che non so quando il processo di stampa è finito in modo da poter leggere il contenuto dell'immagine generata. Ecco il mio codice:

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

Allora come posso essere sicuro che l'elaborazione della stampa sia finita in modo da poter continuare e ottenere il contenuto dell'immagine?

È stato utile?

Soluzione

Sfortunatamente, l'unico modo in cui ho trovato per verificare la stampa dello stato in Word è una delle due cose.

  1. Stampa in modo sincrono. Non eccezionale perché può appenderti fino a quando la stampa non sarà completa.
  2. Stampa il documento in modo asincrono, quindi controlla la proprietà dell'applicazione.backgroundprintingstatus in un ciclo o su un thread di lavoro di sfondo continuamente

Qualcosa come questo....

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

Non perfetto, ma funziona.

Nota che questo ti dirà solo quando avrà finito lo spooling dalla parola. Se stai parlando di sapere quando il documento è effettivamente completato la stampa sulla stampante, questo è un altro problema. Avrai bisogno del lavoro di stampa e dovrai interrogare le cose dello spooler della stampante, che non potevo aiutarti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top