2010-05-30 116 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