2010-05-30 121 views
1

我在我的项目中使用下面的代码。打印对话框显示,但始终在默认打印机上打印,无论用户选择何种方式。我读过类似的主题,但他们都没有使用SerializerWriterCollat​​or。问题是什么?C#WPF Paginator打印机忽略用户的打印机选择

  PrintQueue printQueue = LocalPrintServer.GetDefaultPrintQueue(); 
      XpsDocumentWriter xpsWriter = PrintQueue.CreateXpsDocumentWriter(printQueue); 
      SerializerWriterCollator batchPrinter = xpsWriter.CreateVisualsCollator(); 
var printDialog = new PrintDialog(); 
      if (printDialog.ShowDialog() == true) 
      { 
       PrintTicket ticket = printDialog.PrintTicket; 
       ticket.PageOrientation = PageOrientation.Landscape; 
       var paginator1 = new PagePrinter(winchFlightsCount, 
        new Size(printDialog.PrintableAreaWidth, 
        printDialog.PrintableAreaHeight), winchFlights); 
       var paginator2 = new PagePrinter(tugFlightCount, 
        new Size(printDialog.PrintableAreaWidth, 
        printDialog.PrintableAreaHeight), tugFlights); 
       var paginator3 = new PagePrinter(selfFlightCount, 
        new Size(printDialog.PrintableAreaWidth, 
        printDialog.PrintableAreaHeight), selfFlights); 

       batchPrinter.BeginBatchWrite(); 

       for (int i = 0; i < paginator1.PageCount; i++) 
       { 
        batchPrinter.Write(paginator1.GetPage(i).Visual, ticket); 
       } 
       for (int i = 0; i < paginator2.PageCount; i++) 
       { 
        batchPrinter.Write(paginator2.GetPage(i).Visual, ticket); 
       } 
       for (int i = 0; i < paginator3.PageCount; i++) 
       { 
        batchPrinter.Write(paginator3.GetPage(i).Visual, ticket); 
       } 

       batchPrinter.EndBatchWrite(); 
      } 
     } 

回答

2

这是因为您的batchPrinter是从LocalPrintServer的默认PrintQueue而不是从printDialog创建的。在开始试试这个:

var printDialog = new PrintDialog(); 
if (printDialog.ShowDialog() == true) 
{ 
    PrintQueue printQueue = printDialog.PrintQueue; 
    XpsDocumentWriter xpsWriter = PrintQueue.CreateXpsDocumentWriter(printQueue); 
    SerializerWriterCollator batchPrinter = xpsWriter.CreateVisualsCollator(); 
+1

非常感谢!我替换了printDialog.DefaultPrinter;与printDialog.PrintQueue ;.除此之外,它的工作! – Anders 2010-06-01 16:29:53

+0

@安德斯,谢谢你指出,你是对的。我输入了错误的东西,所以我编辑了我的帖子,以防其他人遇到此页面。 – Oliver 2010-06-02 17:46:49