Поддерживается ли путь печати XPS в System.Printing на стороне сервера? - PullRequest
1 голос
/ 20 августа 2009

Это вопрос из двух частей:

1

Исходные классы печати .NET (в System.Drawing.Printing) не поддерживаются на стороне сервера. (См. http://msdn.microsoft.com/en-us/library/system.drawing.printing(VS.80).aspx)

Я думаю, что более новые классы печати на основе XPS (в System.Printing) поддерживаются на стороне сервера, например в приложениях ASP.NET и службах Windows, но я не могу доказать это. И Microsoft не ответила на мои вопросы по этому поводу.

Кто-нибудь здесь знает?

2

Новая печать на основе XPS иногда выполняет внутреннее преобразование в GDI. Это относится к случаям, когда единственным доступным драйвером является драйвер старого стиля, даже если приложение печатает с новыми классами печати. См. http://msdn.microsoft.com/en-us/library/ms742418.aspx. Безопасны ли новые классы для использования на стороне сервера в такой ситуации?

  • Чтобы уточнить - это все о печати на сервере. Для целей этого обсуждения веб-браузер вообще не задействован. Сервер, либо служба Windows, либо asp.net, должен напрямую распечатать документ на принтере, подключенном к серверу.

Спасибо.

Ответы [ 4 ]

4 голосов
/ 19 октября 2009

Как отмечено в моем комментарии ниже, не существует поддерживаемого решения для печати на стороне сервера в чистом управляемом коде.

Но Aspose только что выпустил некоторый код, который позволяет вам печатать документы XPS из управляемого кода (успешно используя PInvoke для вызова API печати XPS). [Для справки, я считаю, что первоначальная рекомендация Microsoft против использования PInvoke для вызова печати XPS была просто потому, что это сложный API для взаимодействия с использованием PInvoke. Но Aspose, похоже, преуспел, что является хорошей новостью, поскольку устраняет необходимость задействовать отдельную отдельную неуправляемую DLL.]

В целом решение Aspose выглядит как самый простой и полностью поддерживаемый способ печати сложных документов из служб ASP.NET и Windows.

Подробности здесь: http://www.aspose.com/documentation/.net-components/aspose.words-for-.net-and-java/howto-print-a-document-on-a-server-via-the-xpsprint-api.html

0 голосов
/ 31 мая 2013

Не думаю, что вам нужен какой-либо из этих API ASPnose.

Вот пример кода, чтобы сделать именно это:

https://groups.google.com/forum/?fromgroups#!msg/pdfnet-sdk/fOuGOvx06Tk/EckAX-ga2i8J

0 голосов
/ 21 августа 2009

В .Net XPS поддержка является частью WPF. Использование WPF в службах Windows не поддерживается (см. MSDN ), и поэтому печать XPS с использованием .Net, включая использование System.Printing, также не поддерживается для служб.

Тот же ответ применяется для части вопроса «преобразование в GDI», поскольку этот процесс происходит автоматически (в случае, если содержимое XPS печатается в PrintQueue, где драйвер не является XPS, платформа автоматически преобразует содержимое XPS в вызовы DDI, ожидаемые драйвером при печати приложения на основе GDI).

Для серверной разработки (служб), где требуется печать XPS, в Windows 7 доступны API-интерфейсы Win32. В частности, см. API-интерфейс XPSPrint, который обеспечивает доступ к пути печати XPS и поддерживает автоматическое преобразование для очередей печати не-XPS: а также API для манипулирования контентом XPS и работы с тикетами.

0 голосов
/ 20 августа 2009

Если вы пытаетесь заставить браузер пользователя печатать с кода сервера, забудьте об этом. Лучшее, на что вы должны надеяться - это отправить страницу в браузер с некоторым кодом JavaScript, который вызывает window.print().

...