1 votes

L'imprimante C# WPF Paginator ignore la sélection de l'imprimante par l'utilisateur.

J'utilise le code suivant dans mon projet. La boîte de dialogue d'impression s'affiche, mais elle imprime toujours sur l'imprimante par défaut, quelle que soit la sélection de l'utilisateur. J'ai lu des sujets similaires mais aucun d'entre eux ne semble utiliser le SerializerWriterCollator. Quel est le problème ?

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

2voto

Oliver Points 420

C'est parce que votre imprimante batch est créée à partir de la file d'attente d'impression par défaut du LocalPrintServer plutôt qu'à partir du printDialog. Essayez ceci au début :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X