2017-02-15 7 views
0

Я работаю над приложением, где я должен поместить дополнительную строку текста после оригинального печатного текста.Метод PrintQueue.AddJob не работает

Для этого я использую методы FindFirstPrinterChangeNotification и FindNextPrinterChangeNotification API печати Spooler, который отлично работает.

Я в состоянии получить очереди печати, который показывает количество подсчета рабочих мест 1.

Я использую следующий код, чтобы добавить новое задание в очереди печати:

 // Create the printer server and print queue objects 
     LocalPrintServer localPrintServer = new LocalPrintServer(); 
     PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue(); 

     // Call AddJob 
     PrintSystemJobInfo myPrintJob = defaultPrintQueue.AddJob(); 

     // Write a Byte buffer to the JobStream and close the stream 
     Stream myStream = myPrintJob.JobStream; 
     Byte[] myByteBuffer = UnicodeEncoding.Unicode.GetBytes("This is a test string for the print job stream."); 
     myStream.Write(myByteBuffer, 0, myByteBuffer.Length); 
     myStream.Close(); 

Мой код успешно выполнить без каких-либо исключение, но новое задание не печатается вместе с оригинальным текстом.

+0

Вы просто скопировал образец кода MSDN , Что предупреждает: «Этот код работает только с принтерами, которые могут обнаруживать и печатать обычный текст. Некоторые из них не могут». Поверните «некоторые» в «большинство», а не много точечно-матричных принтеров. Не делайте этого, вместо этого используйте PrintDocument. –

+0

, пожалуйста, проверьте это http://stackoverflow.com/a/6106155/1849024 – imsome1

+0

@HansPassant спасибо за ответ. Будет ли этот код работать на термопринтеры POS, или я также должен использовать PrintDocument для них? –

ответ

0

Как указал Тони в комментариях, JobStream изменился в .NET Framework 4.5 для Windows 8 и использовал формат документа XPS. Если вы хотите распечатать, вам нужно будет следовать рекомендациям.

Я не нашел решение, которое работает, но вы можете попробовать использовать XPS Printing API

Ближайший решение, что я нашел, были here и here как было упомянуто Microsoft here

Смежные вопросы