Существует проблема печати в терминальной сессии Windows. Особенно это актуально для тех, кто работает с 1С. Есть как платные, так и бесплатные решения. Например, платное решение ScrewDrivers от фирмы triCerat стоит более 50000 рублей. Вашему вниманию предлагается программа, которая в связке с бесплатным ghostscript  и PDFCreator (лучше старой версии — 4, пятая версия часто даёт сбои при распечатке)  решает обозначенную проблему.

За основу взята статья в которой предложен данный вариант, но для закачки необходимых скриптов все так же предлагается их приобрести хоть и за скромное вознаграждение, но все таки платно. В конечном итоге, после длительных изысканий, на delphi была написана программка, которая использует ghostscript для распечатки PDF файлов из заданного каталога.  Печать происходит на принтер по умолчанию.

Существует 3 основных способа настройки печати через терминал:

  • передача принтера через само подключение RDP, самый простой, но и самый проблематичный способ. Включается простой установкой галочки

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

  • подключение принтера через сеть (сетевое подключение). Вариант так же не сложный, всем хорошо известный, но… есть три проблемы, первая — если вы подключаетесь через интернет, то приходится организовывать vpn соединение, причем со статическими ip адресами, это можно сделать скажем через openvpn, тогда Вы просто зная ip адрес клиента можете выйти на подключение принтера. Плюс ко всему при разрыве соединения приходится его переподключать, а научить пользователя это делать задача порой непростая. Проблема вторая — не для всех принтеров есть нормальный драйвер скажем для серверных операционных систем (если Вы терминалку подняли на основе серверной ОС), тогда приходится ставить неродной драйвер, который потом часто постоянно «вываливается». И плюс ко всему сама подсистема печати в терминале довольно часто приводит к ошибке, задания просто напросто «застревают» при передаче на притер, приходится останавливать службу печати и вручную удалять файлы с сервера из папки C:\Windows\System32\spool\PRINTERS , в общем достаточно кропотливый вопрос. И третье — некоторые драйвера на отрез отказываются работать через RemoteApp, хотя при этом через обычный рабочий стол могут работать вполне стабильно. Более того в последнее время стала наблюдаться тенденция самопроизвольного удаления прописанного принтера, да же если вы запретите удалять принтер через групповую политику. К таким принтерам можно отнести например принтера HP 125, HP 127 и т.д. С ними порой проблемы и при настройке печати даже локально. У Canon-а то же есть подобные проблемки.
  • и последний третий вариант — печать документа через pdf (назовем это так). Принцип этого метода в следующем: на сервере печать происходит через виртуальный принтер PDFCreator (выбран именно он, потому что можно организовать печать без лишних запросов о том куда сохранять файл и под каким именем), который создает pdf файл на стороне клиента в определенной папке. Аналогично можно воспользоваться виртуальным принтером PDF24 (тоже бесплатен). На стороне клиента постоянно вертится скрипт, который при обнаружении в определенной папке pdf файла отправляет его на печать на принтер по умолчанию, после чего распечатанный файл автоматически будет удален. В данном варианте единственное, что необходимо сделать, так это пробросить диски (можно конкретный путь) через само подключение RDP

здесь нужно нажать на кнопку «Подробнее…»

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

Вот в общем то и краткое описание возможных вариантов. Теперь рассмотрим более конкретно третий способ.

Итак, для осуществления третьего способа нам будут необходимы PDFCreatorпрограмма PrintPDF.

Первым делом устанавливаем PDFCreator на сервере терминалов. Следующий шаг — закачиваем PrintPDF (в архив уже входит ghostscript, который используется для распечатки). Распаковываем архив куда нибудь и можно запускать программу PrintPDF.

Теперь все готово для настройки автоматической печати.

  • На стороне клиента нужно запустить программу PrintPDF. Саму программу можно разместить где угодно. После запуска она появится в трее. Двойной клик по иконке откроет окно программы, где можно будет задать папку, откуда программа будет вести печать pdf файлов (по умолчанию это папка где лежит сама программа), а также можно управлять возможностью вести автозапуск программы. Закрытие основного окна не приводит к выключению программы. Автозапуском можно управлять и щелкнув правой кнопкой мыши по иконке в трее. Там же можно осуществить выход из программы. По мимо всего прочего в программе можно включить режим учета количества копий распечатки. К сожалению программа PDFCreator выводит в файл одну копию распечатываемого документа, но она может передавать количество копий в имя файла (об этом ниже, кстати в PDF24 я такой функции не обнаружил), вот это количество, если указать первым в имени формируемого файла, то программа PrintPDF, может его прочесть и выполнить такое количество распечаток этого файла (будет учитываться лишь первый символ имени файла, т.е. это значение не может быть больше 9, если же первый символ не число, то на печать уйдет лишь одна копия). На этом настройка на стороне клиента завершена.
  • На стороне сервера нужно настроить PDFCreater для автоматической печати без вопросов, кстати плюс программы PDFCreate заключается в том, что у каждого эти настройки свои, т.е. у каждого клиента эта папка для распечатки может быть в разных местах и с разными названиями. Для настройки PDFCreater запускаем его

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

И вот здесь переводим переключатель в автоматический режим, далее задаем в качестве папки печати папку на стороне локально пользователя, ставим галочку напротив «не перезаписывать существующие файлы», и убираем галочку напротив опции «Открыть файл после сохранения». Дополнительно в поле формирования имени файла выставьте в первую позицию <NumberOfCopies>, дальше не важно что. Это позволит передавать программе распечатки на принтер PrintPDF количество необходимых копий (максимально будет восприниматься до 9 копий). Нажимаем кнопку Сохранить. На стороне сервера делаем принтер PDFCreator используемым по умолчанию. На стороне клиента если принтеров несколько, то задаем по умолчанию тот, куда должна выходить печать с сервера терминалов, т.к. печать будет происходить только на принтер выбранный по умолчанию, это пожалуй единственный недостаток данного метода, но в большинстве случаем этого достаточно.

Перенаправление папок пользователя (для тех кто впервые с этим столкнулся, очень простым языком).

Немного предыстории,  так уж сложилось, что я при настройке работы пользователя через RDP перенаправляю папки пользователя с сервера («Мои документы» и «Рабочий стол») на одноименные папки локального, пользовательского компьютера. Это очень упрощает в дальнейшем работу пользователя. Как это делается? Для начала при создании RDP соединения я ставлю галочку,

как на рисунке выше (что бы не разбираться где у пользователя что есть), т.е. что бы подключались диски пользователя, эти диски уже в самой сессии терминалов будут видны в проводнике как «Буква диска» на «имя компьютера», примерно так (обведено красным):

А путь до места будет иметь вид \\tsclient\»буква диска»\»и далее путь как на компьютере клиента» (обведено зеленым). Теперь (не подходит лишь если в качестве сервера используется Windows XP) приступаем к перенаправлению папок на сервере в папки на локальном компьютере. Заходим в профиль пользователя на сервере

Щелкаем правой кнопкой мыши по папке, которую собираемся перенаправить и выбираем «Свойства»

Переходим на вкладку «Расположение», вот именно здесь мы должны указать путь к папке на стороне клиента. Подобными действиями только на стороне клиента можно выяснить расположение интересующей нас папки, допустим оно равно C:\Users\Ceasar\Desktop\Documents

Теперь можно либо вручную преобразовать путь, который нужно прописать на сервере, либо нажав на кнопку найти папку перейти по пути который мы нашли выше, но в качестве диска «С» использовать «C на WINHACK64PC» исходя из предыдущих рисунков. Т.е. путь будет равен \\tsclient\C\Users\Ceasar\Desktop\Documents

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

Перенаправление папок нагружает сетевой трафик. Для настройки скажем сервера 1С советую перенапрявлять только папку «Документы» и не в коем случае не перенаправлять папку «Рабочий стол», т.к. папка «Рабочий стол» будет читаться сервером сразу как только будет создано соединение, в то время как папка «Документы» читается только в случае обращения к ней.