2

Word Automation を使用して docx ファイルを生成し、それを印刷しています。これが私の基本的なコードです。adoc.PrintOut の後、しばらく待たなければならないことがわかりました。そうしないと、印刷が失敗する可能性があります。その後、ファイルを閉じたためだと思われます。ファイルが閉じられる前に、Word にはまだ印刷する時間がありません。したがって、基本的に adoc.PrintOut は非ブロックです (これは正しい用語ではない可能性があります)。今、私は10秒待っていますが、うまくいきます。ただし、これに対するよりエレガントなソリューションはありますか? つまり、PrintOut が終了するまで待ってから、ドキュメントを閉じるにはどうすればよいでしょうか?

ありがとう

object yes = true;
object no = false;           
object missing = System.Reflection.Missing.Value;


Word.Application wordApp = new Word.Application();

object fileName = originalFileName;
Word.Document adoc = null;
try
{
    adoc = wordApp.Documents.Open(ref fileName,
            ref missing, ref no, ref missing,
            ref missing, ref missing, ref  missing, ref  missing, ref  missing,
            ref  missing, ref missing, ref yes, ref  missing, ref  missing, ref  missing, ref  missing);

    adoc.Activate();

    /* 
        some other processing
    */



    object sFile = fileName;

    adoc.PrintOut(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, ref  missing, ref missing, ref missing);

    // http://msdn.microsoft.com/en-us/library/b9f0ke7y
    //adoc.PrintPreview();

    for (int i = 0; i < 10; i++)
    {
        Thread.Sleep(TimeSpan.FromSeconds(1));
        Application.DoEvents();
    }
    //adoc.Save();

    object savechanges = Word.WdSaveOptions.wdDoNotSaveChanges; //.wdSaveChanges;
    object originalFormat = Word.WdOriginalFormat.wdWordDocument;
    object routeDocument = missing; // Type.Missing; // true;

    ((Word._Document)adoc).Close(ref savechanges, ref originalFormat, ref routeDocument);

    ((Word._Application)wordApp).Quit(ref savechanges, ref missing, ref missing);

    adoc = null;
    wordApp = null;
}
catch
{

}
finally
{
    /*
        some dispose work       
    */

    // do it twice to release all memory
    GC.Collect();
    GC.WaitForPendingFinalizers();
    GC.Collect();
    GC.WaitForPendingFinalizers();

}
4

1 に答える 1

3

PrintOut の最初のパラメーターを使用できます。

object background = false;
adoc.PrintOut(background, 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, ref missing,
    ref missing);

ドキュメントにあるように: http://msdn.microsoft.com/en-us/library/microsoft.office.tools.word.document.printout(v=vs.80).aspx

"Microsoft Office Word がドキュメントを印刷している間、カスタマイズ コードを続行するには、背景は true です。"

于 2012-08-23T21:58:50.193 に答える