Wie kann ich bei Verwendung eines virtuellen Druckers überprüfen, ob der Druck fertig ist?

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

  •  29-09-2019
  •  | 
  •  

Frage

Ich verwende einen virtuellen Drucker, um ein Word -Dokument in eine Bilddatei in einem C# -Programm zu drucken. Bisher läuft alles gut, außer dass ich nicht weiß, wann der Druckvorgang abgeschlossen ist, damit ich den Inhalt des generierten Bildes lesen kann. Hier ist mein 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);

Wie kann ich dann sicher sein, dass die Druckverarbeitung abgeschlossen ist, damit ich weitermachen und den Bildinhalt erhalten kann?

War es hilfreich?

Lösung

Leider ist die einzige Möglichkeit, wie ich nach dem Druckstatus in Word geprüft habe, eines von zwei Dingen.

  1. Synchron ausdrucken. Nicht großartig, weil es Sie hängen kann, bis der Druck abgeschlossen ist.
  2. Drucken Sie den DOC asynchron aus und überprüfen Sie die Anwendung.

Etwas wie das....

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

Nicht perfekt, aber es funktioniert.

Beachten Sie, dass dies Ihnen nur mitteilen wird, wenn es aus dem Word fertig ist. Wenn Sie darüber sprechen, wann das Dokument tatsächlich abgeschlossen ist, ist dies ein ganz anderes Problem. Sie benötigen den Druckjob und müssen das Druckerspooler -Zeug abfragen, worauf ich Ihnen nicht helfen konnte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top