C # WPF Paginator принтер игнорирует выбор принтера пользователя - PullRequest
1 голос
/ 30 мая 2010

Я использую следующий код в моем проекте. Отображается диалоговое окно печати, но оно всегда печатается на принтере по умолчанию независимо от выбора пользователя. Я читал похожие темы, но ни одна из них, похоже, не использует SerializerWriterCollator. В чем проблема?

            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();
            }
        }

1 Ответ

2 голосов
/ 01 июня 2010

Это потому, что ваш batchPrinter создается из PrintQueue по умолчанию из LocalPrintServer, а не из printDialog. Попробуйте это в начале:

var printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
    PrintQueue printQueue = printDialog.PrintQueue;
    XpsDocumentWriter xpsWriter = PrintQueue.CreateXpsDocumentWriter(printQueue);
    SerializerWriterCollator batchPrinter = xpsWriter.CreateVisualsCollator();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...