Печать от [закрытого] сервиса.NET

21
задан Ijas Ameenudeen 20 January 2019 в 13:54
поделиться

11 ответов

Доверяйте мне, Вы потратите больше денег, пытающихся искать/разрабатывать решение это по сравнению с покупкой стороннего компонента. Не изобретайте велосипед и идите для заплаченного решения.

Печать является сложной проблемой, и я хотел бы видеть день, когда лучшая поддержка платформы добавляется для этого.

14
ответ дан 29 November 2019 в 20:36
поделиться

Печать от службы Windows является действительно болезненной. Это, кажется, работает... иногда..., но наконец это кормушки или время от времени выдает исключение без любой ясной причины. Это действительно безнадежно. Официально, это даже не поддерживается без любого объяснения, ни любого предложения по альтернативному решению.

Недавно, мне противостояли к проблеме и после нескольких неудачных пробных версий и экспериментирований, я приехал наконец с двумя эффективными решениями:

  • Запись Ваш собственный DLL печати с помощью API Win32 (в C/C++, например), затем используйте, это от сервиса с P/Invoke (хорошо работает)
  • Запись собственный компонент COM + печати, затем использует его от сервиса. Я выбрал это решение с успехом недавно (но это был сторонний компонент COM +, не собственный записанный), Это работает абсолютно прекрасное также.
9
ответ дан 29 November 2019 в 20:36
поделиться

Я сделал это. Это - боль в A*s. Проблема состоит в том, что печать требует, что механизм GDI для существования, который обычно означает, что у Вас должен быть рабочий стол, который только загружается, когда Вы зарегистрированы. При попытке сделать это от Сервиса на Сервер, то Вы обычно не зарегистрированы.

Настолько же сначала Вы не можете работать как нормальный пользователь услуги, но вместо этого как реальный пользователь, который имеет интерактивные права входа в систему. Тогда необходимо настроить записи реестра сервисов (я забываю, как в данный момент, должен был бы найти код, который я могу сделать сегодня вечером, если Вам действительно интересно). Наконец, необходимо молиться.

Ваша самая большая долгосрочная головная боль будет с драйверами печати. Если Вы работаете как услуга без зарегистрированного пользователя, некоторым драйверам печати нравится открываться диалоговые окна время от времени. Что происходит, когда Ваш принтер вне тонера? Или из бумаги? Драйвер может открыться диалоговое окно, которое никогда не будет замечаться и держать очередь печати, потому что никто не зарегистрирован!

7
ответ дан 29 November 2019 в 20:36
поделиться

Печать от сервиса является плохой идеей. Сетевые принтеры подключены "в расчете на пользователя". Можно отметить сервис, который будет выполнен как конкретный пользователь, но я полагал бы что плохая практика безопасности. Вы могли бы быть в состоянии соединиться с локальным принтером, но я буду все еще колебаться прежде, чем пойти этим путем.

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

, Если необходимо было распечатать данные как равные интервалы, установите событие Task через Планировщика задач. Запуск процесса от сервиса потребует знания имени пользователя и пароля, которое снова является плохой практикой безопасности.

Что касается печати себя, используйте стороннюю программу для генерации отчета, будет самым легким.

4
ответ дан 29 November 2019 в 20:36
поделиться

Для ответа на первый вопрос это может быть довольно прямым в зависимости от данных. У нас есть множество Основанных на сервисе приложений, которые делают точно, что Вы спрашиваете. Как правило, мы анализируем входящий файл и обертываем наш собственный Постскриптум или PCL вокруг этого. Если Вы, макет довольно прост, то существуют некоторые очень простые коды PCL, с которыми можно обернуть его обеспечить бросок из-под кольца шрифта/печати, который Вы хотите (я был бы больше тогда рад дать Вам некоторые указания здесь офлайн).

Один у Вас есть печать готовый файл, который можно отправить ей на принтер UNC, который совместно используется, непосредственно в локально установленный принтер, или даже к IP устройства (СЫРЫЕ ДАННЫЕ или данные типа LPR).

, однако, при потере работоспособности по пути PDF самый простой метод должен отправить вывод PDF на принтер, который поддерживает прямую печать PDF (многие делают теперь). В этом случае Вы просто отправляете PDF на устройство, и далеко это печатает.

другая опция состоит в том, чтобы запуститься Ghostscript, который должен быть свободным для Ваших потребностей (проверьте лицензирование, поскольку у них есть некоторые другая версия, некоторый GNU, некоторый GPL и т.д.) и или использование, это создается в печати, функционирует или просто преобразовывает в Постскриптум и отправляет к устройству. Я использовал Ghostscript много раз в обслуживании приложения, но не огромный вентилятор, поскольку Вы будете в основном выходить из оболочки и выполнять приложение командной строки, чтобы сделать преобразование. Однако это - стабильное приложение, которое действительно имеет тенденцию перестать работать корректно

4
ответ дан 29 November 2019 в 20:36
поделиться

Я думаю, что мы собираемся пойти сторонним путем. Мне нравится XSL-> HTML-> PDF-> поток Принтера... Winnovative HTML к PDF выглядит хорошим для первой части, но я сталкиваюсь с блоком, находящим хорошее решение для печати PDF... какие-либо предложения? Идеально лицензия была бы на основе разработчика, не на развернутой основе во время выполнения.

0
ответ дан 29 November 2019 в 20:36
поделиться

Если можно произвести для регистрации сценария, некоторые принтеры распечатают что-либо, что получает FTPed к определенному каталогу на них.

Мы использовали это для заканчивания кредитов печати, которые наш университет представил на нас, но если эксплуатационные мощности к PS тогда Вы можете просто ftp файл PS к принтеру.

1
ответ дан 29 November 2019 в 20:36
поделиться

Это не может быть тем, что Вы ищете, но если я должен был сделать этот quick& грязный, я был бы:

  1. Создают отдельное приложение WPF (таким образом, я мог использовать встроенную обработку документов)
  2. , Дают сервису способность взаимодействовать с рабочим столом (обратите внимание, что Вы ничего не должны на самом деле показать на рабочем столе или зарегистрированы, чтобы это работало)
  3. , Сделали, чтобы сервис запустил приложение и дал ему данные для печати.

Вы могли, вероятно, также глоток спиртного это для печати от веб-браузера, который Вы выполняете из службы (хотя я рекомендовал бы создать Ваш собственный IE оболочки, вместо того, чтобы использовать полный браузер).

Для более подробного (также свободный) решение, Ваш лучший выбор состоит в том, чтобы, вероятно, вручную отформатировать документ самостоятельно (использующий GDI +, чтобы сделать расположение для Вас). Это является утомительным, подверженным ошибкам, трудоемким, и тратит впустую много бумаги во время разработки, но также и дает Вам большую часть контроля тем, что идет в принтер.

1
ответ дан 29 November 2019 в 20:36
поделиться

В ответе на Ваш вопрос о печати PDF я не нашел изящное решение. Я был, "выходят из оболочки" луг к Adobe, который был ненадежен и потребовал, чтобы пользователь был зарегистрирован в любом случае. Для решения этой определенной проблемы я запросил, чтобы файлы, которые мы обрабатываем (выставили счет) быть отформатированными как многостраничные файлы TIFF вместо этого, которые могут быть разделены независимо и распечатали использующие собственные функции печати.NET. Позиция Adobe, кажется, "заставляют пользователя просматривать файл в Adobe Reader, и они могут нажать печать". Бесполезный.

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

0
ответ дан 29 November 2019 в 20:36
поделиться

Печать с использованием System.Drawing.Printing не поддерживается MS, согласно ответу Яна Тревина. Однако вы можете использовать новый, основанный на WPF, System.Printing (я думаю )

0
ответ дан 29 November 2019 в 20:36
поделиться

Мы используем DevExpress 'XtraReports для печати из службы без каких-либо проблем. Их модель отчета аналогична модели Windows Forms, поэтому вы можете динамически вставлять текстовые элементы, а затем выдавать команду печати. ​​

1
ответ дан 29 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: