2

仮想プリンターを使用して、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);

次に、画像コンテンツを続行して取得できるように、印刷処理が終了したことをどのように確認できますか?

4

1 に答える 1

2

残念ながら、印刷状況を単語で確認する唯一の方法は、2つのうちの1つです。

  1. 同期して印刷します。印刷が完了するまでハングアップする可能性があるため、あまり良くありません。
  2. ドキュメントを非同期で印刷してから、APPLICATION.BACKGROUNDPRINTINGSTATUSプロパティをループ内またはバックグラウンドワーカースレッドで、0になる(印刷されなくなる)か、ウォッチドッグタイムアウトに達するまで継続的にチェックします。

このようなもの....

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

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

これは、Wordからのスプーリングが終了したときにのみ通知されることに注意してください。ドキュメントが実際にプリンタで印刷を完了する時期を知ることについて話している場合、それはまったく別の問題です。印刷ジョブIDが必要であり、プリンタースプーラーのものを照会する必要がありますが、私はそれを手伝うことができませんでした。

于 2010-10-17T03:56:36.883 に答える