Почему 1С печатает штрихкоды нечетко через RDP и как это исправить?

Системный администратор IT и автоматизация бизнеса
← На главную

Многие системные администраторы и специалисты по внедрению 1С сталкиваются с классической ситуацией: после переустановки операционной системы у пользователя или переноса базы на терминальный сервер, штрихкоды начинают печататься нечетко. Линии становятся размытыми, сканеры перестают их считывать, а при детальном рассмотрении видно, что штрихкод печатается мелкими точками (градиентом), а не сплошной черной линией. Рассмотрим эту проблему подробно и разберем по шагам все возможные способы её решения.

Проанализируем причину возникновения проблемы

Когда пользователи работают в терминальном режиме (например, на базе Windows Server 2008 или более новых версий) через протокол RDP, система по умолчанию использует технологию EasyPrint для перенаправления локальных принтеров в терминальную сессию. Эта технология позволяет не устанавливать драйверы каждого локального принтера на сам сервер, что сильно экономит ресурсы и упрощает администрирование.

Однако у технологии EasyPrint есть существенный недостаток. При печати она формирует промежуточный документ в формате XPS. Для того чтобы ускорить передачу задания на печать по сети, Windows применяет алгоритмы сжатия графики (обычно алгоритмы JPEG). Из-за этого сжатия четкие контрастные границы линий штрихкода «замыливаются», появляются артефакты сжатия, и драйвер принтера, пытаясь распечатать этот полутон, применяет растрирование (печать мелкими точками). Сканер штрихкодов такое изображение считать уже не может.

Решение 1: Отключение EasyPrint и использование оригинальных драйверов

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

  1. Установите оригинальные драйверы вашего принтера (например, Canon MF4350d) непосредственно на терминальный сервер. Разрядность драйвера должна соответствовать разрядности сервера.
  2. Перейдите на локальный компьютер пользователя (клиентскую машину).
  3. Откройте параметры подключения к удаленному рабочему столу (RDP клиент).
  4. Перейдите на вкладку Локальные ресурсы.
  5. В разделе Локальные устройства и ресурсы нажмите кнопку Подробнее.
  6. Снимите галочку с пункта Принтеры, но оставьте включенным перенаправление Портов (Ports).
  7. Подключитесь к серверу. Теперь в сессии нужно будет вручную добавить принтер, используя перенаправленный порт клиента (например, TS001) и ранее установленный оригинальный драйвер.

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

Решение 2: Централизованное отключение EasyPrint через групповые политики (GPO)

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

  1. Откройте редактор локальной групповой политики на сервере (выполните команду gpedit.msc).
  2. Перейдите по пути: Конфигурация компьютера -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Перенаправление принтеров.
  3. Найдите политику Использовать в первую очередь драйвер принтера Easy Print терминальных служб.
  4. Переведите её в состояние Отключено.
  5. Примените настройки и обновите политики (через команду gpupdate /force).

Теперь, если на сервере установлен драйвер, совпадающий по имени с локальным принтером пользователя, сервер задействует его, полностью минуя XPS и EasyPrint.

Решение 3: Настройка параметров сжатия в Microsoft XPS Document Writer

Если установка оригинальных драйверов на сервер по какой-либо причине невозможна, рассмотрим другой подход. Мы можем изменить параметры качества самой технологии XPS, чтобы она не использовала сжатие с потерями (JPEG).

  1. На локальной клиентской машине (откуда идет печать) откройте список принтеров.
  2. Найдите принтер Microsoft XPS Document Writer или свойства вашего перенаправленного принтера.
  3. Зайдите в параметры печати и перейдите на вкладку Дополнительно (Advanced).
  4. Найдите параметры обработки изображений / картинки.
  5. Измените метод сжатия с JPG (со сжатием) на PNG (без сжатия).

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

Дополнительные настройки для идеальной печати штрихкодов

Проанализируем другие неочевидные настройки, которые влияют на качество печати штрихкодов через RDP. Даже если EasyPrint отключен, вы можете столкнуться с проблемами из-за настроек локальной ОС или драйвера принтера.

1. Масштабирование экрана (DPI)

Если у пользователя на Windows 7 или более новой версии установлено масштабирование экрана, отличное от 100% (например, 125% для больших мониторов), при пробросе сессии через RDP координаты линий штрихкода могут искажаться. Линии смещаются на доли пикселя, и драйвер принтера пытается их «усрединть», печатая полутона. Убедитесь, что масштабирование в параметрах экрана на локальной машине установлено строго на 100%.

2. Сглаживание шрифтов ClearType

Штрихкоды в 1С часто выводятся с помощью специальных шрифтов (например, EAN13.ttf). Система сглаживания экранных шрифтов ClearType может вмешиваться в этот процесс, добавляя серые пиксели по краям черных линий для визуальной гладкости на экране монитора. Отключите технологию ClearType на стороне сервера в терминальной сессии, чтобы передавать принтеру строгий черно-белый контур.

3. Настройки полутонов (Dithering) в драйвере принтера

В настройках лазерных принтеров (в частности, в серии Canon MF) по умолчанию может стоять графический режим обработки полутонов. Откройте свойства принтера, перейдите в раздел Качество или Дополнительные параметры и найдите параметр Dithering (Дизеринг / Полутона). Измените его значение с Auto или Pattern на Error Diffusion (Диффузия ошибок), либо выберите профиль печати Text (Текст). Это заставит принтер использовать только жесткий черный цвет без попыток смешивать его с белым для получения серого.

4. Использование компоненты 1С:Печать штрихкодов (Native API)

Если проблема сохраняется в старых конфигурациях 1С, проверьте, какая компонента печати штрихкодов используется. Старые ActiveX-компоненты хуже работают в современных 64-битных терминальных средах. По возможности, переведите конфигурацию на использование современных компонент печати по технологии Native API, которые корректнее отдают графику в подсистему печати Windows.

5. Печать через PDF как временный «костыль»

Если нужно распечатать срочно, а времени на настройку сервера нет, воспользуйтесь проверенным обходным путем: сохраните печатную форму со штрихкодом из 1С в формат Excel или PDF прямо внутри удаленной сессии. Затем откройте этот файл (например, через Adobe Reader) и отправьте на печать. Программы для работы с PDF имеют собственные мощные алгоритмы растеризации шрифтов и векторов, которые часто успешно обходят ограничения терминальной печати и выдают на принтер идеальную картинку.

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

← На главную