【问题标题】:C# WPF Paginator printer ignoring user's printer selectionC# WPF Paginator 打印机忽略用户的打印机选择
【发布时间】:2010-05-30 17:41:34
【问题描述】:

我在我的项目中使用以下代码。打印对话框显示,但无论用户选择如何,它总是在默认打印机上打印。我读过类似的主题,但似乎都没有使用 SerializerWriterCollat​​or。有什么问题?

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

【问题讨论】:

    标签: c# wpf printing


    【解决方案1】:

    这是因为您的 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();
    

    【讨论】:

    • 非常感谢!我替换了 printDialog.DefaultPrinter;与 printDialog.PrintQueue;。除此之外它还有效!
    • @Anders,感谢您指出这一点,您是对的。我输入了错误的东西,所以我编辑了我的帖子,以防其他人看到这个页面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2017-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多