2013-11-25 8 views
2

Я попробовал этот пример из MSDN в проекте ASP.NET MVC:Печать через PrintQueue работу в ASP.NET MVC не удается с 0 байт Размер файла печататься

public void Print(string printQueueName, string printData) 
    { 
     PrintQueue printerQueue = new LocalPrintServer().GetPrintQueue(printQueueName); 

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

     // Write a Byte buffer to the JobStream and close the stream 
     Stream myStream = myPrintJob.JobStream; 
     Byte[] myByteBuffer = UnicodeEncoding.Unicode.GetBytes(printData); 
     myStream.Write(myByteBuffer, 0, myByteBuffer.Length); 
     myStream.Close(); 
    } 

Я пытался печатать PDF, XPS и OneNote виртуальных принтеров. После подтверждения диалогового окна печати в задании принтера появляется задание на печать, затем исчезает, и печатаемый файл создается, но с размером байта 0 !!!

Я не знаю, где моя вина, и надеюсь найти здесь помощь.

Заранее спасибо.

ответ

2

Пример, который близок к MSDN, также не работает на моем принтере. Это неуместно, потому что этого примера недостаточно для печати PDF или XPS, поскольку нельзя просто вывести поток байтов этих типов в качестве потока на принтер. У вас есть как минимум несколько вариантов:

  • Использование PrintDocument. Конвертируйте файлы PDF/TIFF/Возможно, файлы onenote в Изображения (файлы E.G. tiff), и вы можете печатать с этим классом, используя событие PrintDocument.PrintPage и Graphics.DrawImage.
  • Использование/Покупка стороннего участника print API's для PDF. Вы можете уйти с прямой печатью XPS, но у нее есть некоторые проблемы (см. Подробности ниже). OneNote, я не знаю.
  • Печать файлов через command line с помощью Process
  • написать свои собственные драйверы печати

Дальнейшие подробности
Я не знаком с OneNote печати. Печать XPS может быть довольно сложной. Поля должны быть рассчитаны в коде, потому что они зависят от настроек принтера, которые можно найти в PrintTicket. Используя WPF (который тесно связан с XPS), есть ошибка, которую я обнаружил где-то в процессе сериализации XPS. XpsDocument не сохраняет рассчитанную область печати. Документы будут печатать с областями печати по умолчанию, которые могут привести к отключению. Я подтвердил эту ошибку в Microsoft Connect. См. Их ответ ниже.

И, наконец, если вы просто используете SSRS, вы можете легко изменить тип вывода из PDF/XPS в изображение.

обратной связи для XPS жучок на Microsoft Connect (ссылка частная):

Название: XpsDocument не сохраняет вычисленный устройство для WPF в> FixedPage.Arrange()

Команда WPF имеет недавно рассмотрел эту проблему и не будет , рассматривая эту проблему, поскольку в данный момент команда фокусируется на ошибках , влияющих на наибольшее количество разработчиков WPF. Если вы считаете, что было разрешено по ошибке, пожалуйста, активируйте эту ошибку с любыми необходимыми техническими данными.

Мы ценим обратную связь. Однако этот вопрос не будет адресован в следующей версии WPF. Спасибо. -WPF Team

.