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

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

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

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

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

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

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

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

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

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

Первым делом устанавливаем PDFCreator на сервере терминалов. Далее определяемся, что мы будем использовать на клиенте, ставим и настраиваем либо Adobe Reader, либо FoxitReader, здесь я думаю проблем не будет. Следующий шаг — закачиваем скрипты и помещаем в определенную папку (в самом архиве они уже лежат  папке «Печать»), т.е. распаковываем архив. Для простоты дальнейшей работы пользователя я их выкладываю в папку «Мои документы», так в последствии будет проще объяснить пользователю где удалять «зависшие» pdf файлы, если конечно это впоследствии произойдет. В самом низу статьи я расскажу о том как перенаправить папки пользователя на сервере в папки локального пользователя, это часто облегчает работу пользователей.

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

  • На стороне клиента нужно запустить программу PrintPDF. Саму программу можно разместить где угодно. После запуска она появится в трее. Двойной клик по иконке откроет окно программы, где можно будет задать папку, откуда программа будет вести печать pdf файлов (по умолчанию это папка где лежит сама программа), а также можно управлять возможностью вести автозапуск программы. Закрытие основного окна не приводит к выключению программы. Автозапуском можно управлять и щелкнув правой кнопкой мыши по иконке в трее. Там же можно осуществить выход из программы. Дополнительно ко всему Вы можете сделать так, что бы при распечатке выводился диалог выбора принтера, где так же можно задать количество копий. По мимо всего прочего в программе можно включить режим учета количества копий распечатки. К сожалению программа PDFCreator выводит в файл одну копию распечатываемого документа, но она может передавать количество копий в имя файла (об этом ниже), дак вот это количество, если указать первым в имени формируемого файла, то программа 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

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