Доверяйте мне, Вы потратите больше денег, пытающихся искать/разрабатывать решение это по сравнению с покупкой стороннего компонента. Не изобретайте велосипед и идите для заплаченного решения.
Печать является сложной проблемой, и я хотел бы видеть день, когда лучшая поддержка платформы добавляется для этого.
Печать от службы Windows является действительно болезненной. Это, кажется, работает... иногда..., но наконец это кормушки или время от времени выдает исключение без любой ясной причины. Это действительно безнадежно. Официально, это даже не поддерживается без любого объяснения, ни любого предложения по альтернативному решению.
Недавно, мне противостояли к проблеме и после нескольких неудачных пробных версий и экспериментирований, я приехал наконец с двумя эффективными решениями:
Я сделал это. Это - боль в A*s. Проблема состоит в том, что печать требует, что механизм GDI для существования, который обычно означает, что у Вас должен быть рабочий стол, который только загружается, когда Вы зарегистрированы. При попытке сделать это от Сервиса на Сервер, то Вы обычно не зарегистрированы.
Настолько же сначала Вы не можете работать как нормальный пользователь услуги, но вместо этого как реальный пользователь, который имеет интерактивные права входа в систему. Тогда необходимо настроить записи реестра сервисов (я забываю, как в данный момент, должен был бы найти код, который я могу сделать сегодня вечером, если Вам действительно интересно). Наконец, необходимо молиться.
Ваша самая большая долгосрочная головная боль будет с драйверами печати. Если Вы работаете как услуга без зарегистрированного пользователя, некоторым драйверам печати нравится открываться диалоговые окна время от времени. Что происходит, когда Ваш принтер вне тонера? Или из бумаги? Драйвер может открыться диалоговое окно, которое никогда не будет замечаться и держать очередь печати, потому что никто не зарегистрирован!
Печать от сервиса является плохой идеей. Сетевые принтеры подключены "в расчете на пользователя". Можно отметить сервис, который будет выполнен как конкретный пользователь, но я полагал бы что плохая практика безопасности. Вы могли бы быть в состоянии соединиться с локальным принтером, но я буду все еще колебаться прежде, чем пойти этим путем.
наилучший вариант состоит в том, чтобы сделать, чтобы сервис хранил данные и имел запущенное пользователями приложение, делают печать путем просьбы сервиса данные. Или общее местоположение, что данные хранятся, как база данных.
, Если необходимо было распечатать данные как равные интервалы, установите событие Task через Планировщика задач. Запуск процесса от сервиса потребует знания имени пользователя и пароля, которое снова является плохой практикой безопасности.
Что касается печати себя, используйте стороннюю программу для генерации отчета, будет самым легким.
Для ответа на первый вопрос это может быть довольно прямым в зависимости от данных. У нас есть множество Основанных на сервисе приложений, которые делают точно, что Вы спрашиваете. Как правило, мы анализируем входящий файл и обертываем наш собственный Постскриптум или PCL вокруг этого. Если Вы, макет довольно прост, то существуют некоторые очень простые коды PCL, с которыми можно обернуть его обеспечить бросок из-под кольца шрифта/печати, который Вы хотите (я был бы больше тогда рад дать Вам некоторые указания здесь офлайн).
Один у Вас есть печать готовый файл, который можно отправить ей на принтер UNC, который совместно используется, непосредственно в локально установленный принтер, или даже к IP устройства (СЫРЫЕ ДАННЫЕ или данные типа LPR).
, однако, при потере работоспособности по пути PDF самый простой метод должен отправить вывод PDF на принтер, который поддерживает прямую печать PDF (многие делают теперь). В этом случае Вы просто отправляете PDF на устройство, и далеко это печатает.
другая опция состоит в том, чтобы запуститься Ghostscript, который должен быть свободным для Ваших потребностей (проверьте лицензирование, поскольку у них есть некоторые другая версия, некоторый GNU, некоторый GPL и т.д.) и или использование, это создается в печати, функционирует или просто преобразовывает в Постскриптум и отправляет к устройству. Я использовал Ghostscript много раз в обслуживании приложения, но не огромный вентилятор, поскольку Вы будете в основном выходить из оболочки и выполнять приложение командной строки, чтобы сделать преобразование. Однако это - стабильное приложение, которое действительно имеет тенденцию перестать работать корректно
Я думаю, что мы собираемся пойти сторонним путем. Мне нравится XSL-> HTML-> PDF-> поток Принтера... Winnovative HTML к PDF выглядит хорошим для первой части, но я сталкиваюсь с блоком, находящим хорошее решение для печати PDF... какие-либо предложения? Идеально лицензия была бы на основе разработчика, не на развернутой основе во время выполнения.
Если можно произвести для регистрации сценария, некоторые принтеры распечатают что-либо, что получает FTPed к определенному каталогу на них.
Мы использовали это для заканчивания кредитов печати, которые наш университет представил на нас, но если эксплуатационные мощности к PS тогда Вы можете просто ftp файл PS к принтеру.
Это не может быть тем, что Вы ищете, но если я должен был сделать этот quick& грязный, я был бы:
Вы могли, вероятно, также глоток спиртного это для печати от веб-браузера, который Вы выполняете из службы (хотя я рекомендовал бы создать Ваш собственный IE оболочки, вместо того, чтобы использовать полный браузер).
Для более подробного (также свободный) решение, Ваш лучший выбор состоит в том, чтобы, вероятно, вручную отформатировать документ самостоятельно (использующий GDI +, чтобы сделать расположение для Вас). Это является утомительным, подверженным ошибкам, трудоемким, и тратит впустую много бумаги во время разработки, но также и дает Вам большую часть контроля тем, что идет в принтер.
В ответе на Ваш вопрос о печати PDF я не нашел изящное решение. Я был, "выходят из оболочки" луг к Adobe, который был ненадежен и потребовал, чтобы пользователь был зарегистрирован в любом случае. Для решения этой определенной проблемы я запросил, чтобы файлы, которые мы обрабатываем (выставили счет) быть отформатированными как многостраничные файлы TIFF вместо этого, которые могут быть разделены независимо и распечатали использующие собственные функции печати.NET. Позиция Adobe, кажется, "заставляют пользователя просматривать файл в Adobe Reader, и они могут нажать печать". Бесполезный.
я все еще стремлюсь найти хороший способ представить качественные отчеты, которые могут быть произведены от веб-сервера...
Печать с использованием System.Drawing.Printing не поддерживается MS, согласно ответу Яна Тревина. Однако вы можете использовать новый, основанный на WPF, System.Printing (я думаю )
Мы используем DevExpress 'XtraReports для печати из службы без каких-либо проблем. Их модель отчета аналогична модели Windows Forms, поэтому вы можете динамически вставлять текстовые элементы, а затем выдавать команду печати.