Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#WPF分页器打印机忽略用户';打印机选择_C#_Wpf_Printing - Fatal编程技术网

C#WPF分页器打印机忽略用户';打印机选择

C#WPF分页器打印机忽略用户';打印机选择,c#,wpf,printing,C#,Wpf,Printing,我在我的项目中使用以下代码。“打印”对话框将显示,但无论用户的选择如何,它始终在默认打印机上打印。我读过类似的主题,但似乎没有一个使用SerializerWriterCollector。有什么问题 PrintQueue printQueue = LocalPrintServer.GetDefaultPrintQueue(); XpsDocumentWriter xpsWriter = PrintQueue.CreateXpsDocumentWrit

我在我的项目中使用以下代码。“打印”对话框将显示,但无论用户的选择如何,它始终在默认打印机上打印。我读过类似的主题,但似乎没有一个使用SerializerWriterCollector。有什么问题

            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();
            }
        }
PrintQueue PrintQueue=LocalPrintServer.GetDefaultPrintQueue();
XpsDocumentWriter xpsWriter=PrintQueue.CreateXpsDocumentWriter(PrintQueue);
SerializerWriterCollator batchPrinter=xpsWriter.CreateVisualsCollator();
var printDialog=新建printDialog();
if(printDialog.ShowDialog()==true)
{
PrintTicket票证=printDialog.PrintTicket;
ticket.PageOrientation=PageOrientation.Landscape;
var paginator1=新的页面打印机(WinchLightsCount,
新尺寸(printDialog.PrintableAreaWidth,
printDialog.PrintableAreaHeight),WinchLights);
var paginator2=新页面打印机(tugFlightCount,
新尺寸(printDialog.PrintableAreaWidth,
printDialog.PrintableAreaHeight(可打印区域高度);
var paginator3=新的页面打印机(selfFlightCount,
新尺寸(printDialog.PrintableAreaWidth,
printDialog.PrintableAreaHeight),selfFlights);
batchPrinter.BeginBatchWrite();
for(int i=0;i
这是因为批处理打印机是从LocalPrintServer的默认打印队列创建的,而不是从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;。除此之外,它起作用了@安德斯,谢谢你指出这一点,你说得对。我打错了,所以我编辑了我的帖子,以防其他人看到这个页面。