none
WPF打印WORD文档? RRS feed

  • 问题

  • WPF直接打印123.doc文档,不弹出打印对话框,不闪。悄悄打印,如何解决?

    -------------------------------------

     或者打印XPS文档,不弹出打印对话框,如何解决?

    • 已编辑 WCF小Q 2013年4月14日 7:40
    2013年4月14日 7:37

答案

  • 可以考虑用word automation.

                Word.Application oWord = new Word.Application();
                oWord.Visible = false;
              
                Word.Document oDoc = oWord.Documents.Open(@"D:\TestOpenXml.docx");
                object sOut = @"D:\test.xps";
                object oMissing =Type.Missing;
                object background = true;
                oDoc.PrintOut(background, oMissing, oMissing, sOut);           
                while (oWord.Application.BackgroundPrintingStatus>0)
                {
                    Debug.Print(oWord.Application.BackgroundPrintingStatus.ToString());              
                }
    
                oDoc.Close();
                oWord.Quit();
                oDoc = null;
                oWord = null;
                
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();

    Good day.


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 WCF小Q 2013年4月17日 9:39
    2013年4月15日 5:50
    版主
  • 有设置好默认的打印机么?直接从Word 里面,File-> Print -> Print 按钮, 可以直接打印出文件么?

    我用的是 Microsoft XPS Document Writer 作为默认打印机,所以在PrintOut里面设置了outputfilename. 如果你用的是其他打印机,我指的是实体打印机,你可以尝试下传递一个oMissing。

    你也可以考虑用控制面板里面修改一下默认打印机重新尝试下。

    这个while循环里面的语句不一定执行,比如打印很快,执行这一行代码,任务已经结束时。BackgroundPrintingStatus 用来读取返回后台打印队列里面打印任务的个数的。

    你可以尝试下这种情况:

                object background = false;
                oDoc.PrintOut(background, oMissing, oMissing, sOut);    

    这种情况,程序会等待打印的执行。

    参考:Document.PrintOut Method


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年4月16日 8:27
    版主

全部回复

  • 可以考虑用word automation.

                Word.Application oWord = new Word.Application();
                oWord.Visible = false;
              
                Word.Document oDoc = oWord.Documents.Open(@"D:\TestOpenXml.docx");
                object sOut = @"D:\test.xps";
                object oMissing =Type.Missing;
                object background = true;
                oDoc.PrintOut(background, oMissing, oMissing, sOut);           
                while (oWord.Application.BackgroundPrintingStatus>0)
                {
                    Debug.Print(oWord.Application.BackgroundPrintingStatus.ToString());              
                }
    
                oDoc.Close();
                oWord.Quit();
                oDoc = null;
                oWord = null;
                
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();

    Good day.


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 WCF小Q 2013年4月17日 9:39
    2013年4月15日 5:50
    版主
  • 可以考虑用word automation.

                Word.Application oWord = new Word.Application();
                oWord.Visible = false;
              
                Word.Document oDoc = oWord.Documents.Open(@"D:\TestOpenXml.docx");
                object sOut = @"D:\test.xps";
                object oMissing =Type.Missing;
                object background = true;
                oDoc.PrintOut(background, oMissing, oMissing, sOut);           
                while (oWord.Application.BackgroundPrintingStatus>0)
                {
                    Debug.Print(oWord.Application.BackgroundPrintingStatus.ToString());              
                }
    
                oDoc.Close();
                oWord.Quit();
                oDoc = null;
                oWord = null;
                
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();

    Good day.


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    打印机没有任务,断点查询,没有执行while里的语句
     while (oWord.Application.BackgroundPrintingStatus>0)
                {
                    Debug.Print(oWord.Application.BackgroundPrintingStatus.ToString());              
                }
    2013年4月15日 13:25
  • 有设置好默认的打印机么?直接从Word 里面,File-> Print -> Print 按钮, 可以直接打印出文件么?

    我用的是 Microsoft XPS Document Writer 作为默认打印机,所以在PrintOut里面设置了outputfilename. 如果你用的是其他打印机,我指的是实体打印机,你可以尝试下传递一个oMissing。

    你也可以考虑用控制面板里面修改一下默认打印机重新尝试下。

    这个while循环里面的语句不一定执行,比如打印很快,执行这一行代码,任务已经结束时。BackgroundPrintingStatus 用来读取返回后台打印队列里面打印任务的个数的。

    你可以尝试下这种情况:

                object background = false;
                oDoc.PrintOut(background, oMissing, oMissing, sOut);    

    这种情况,程序会等待打印的执行。

    参考:Document.PrintOut Method


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2013年4月16日 8:27
    版主