仮想プリンターを使用するとき、プリントが完成したことを確認できますか?

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

  •  29-09-2019
  •  | 
  •  

質問

仮想プリンターを使用して、C#プログラムの画像ファイルにWordドキュメントを印刷しています。これまでのところ、印刷プロセスがいつ終了したかわからないので、生成された画像のコンテンツを読むことができることを除いて、すべてが順調に進んでいます。これが私のコードです:

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

それでは、どのようにして印刷処理が終了して、継続して画像コンテンツを取得できるようにすることができますか?

役に立ちましたか?

解決

残念ながら、Wordでステータスを印刷することをチェックすることがわかった唯一の方法は、2つのことの1つです。

  1. 同期して印刷します。しかし、印刷が完了するまであなたを掛けることができるので、素晴らしいことではありません。
  2. Docを非同期に印刷してから、アプリケーションを確認してください。BackgroundPrintingStatusプロパティは、ループまたはバックグラウンドワーカースレッドで0(印刷しなくなる)またはWatchDog TimeOutにヒットするまで継続的に継続的にスレッドになります。

このようなもの....

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

完璧ではありませんが、機能します。

これは、単語からのスプールが完了したときにのみ表示されることに注意してください。ドキュメントが実際にプリンターに印刷を完了したかを知っていることについて話している場合、それはまったく別の問題です。 Print JobIDが必要で、プリンターのスプーラーのものを照会する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top