Многие системные администраторы и специалисты по внедрению 1С сталкиваются с классической ситуацией: после переустановки операционной системы у пользователя или переноса базы на терминальный сервер, штрихкоды начинают печататься нечетко. Линии становятся размытыми, сканеры перестают их считывать, а при детальном рассмотрении видно, что штрихкод печатается мелкими точками (градиентом), а не сплошной черной линией. Рассмотрим эту проблему подробно и разберем по шагам все возможные способы её решения.
Когда пользователи работают в терминальном режиме (например, на базе Windows Server 2008 или более новых версий) через протокол RDP, система по умолчанию использует технологию EasyPrint для перенаправления локальных принтеров в терминальную сессию. Эта технология позволяет не устанавливать драйверы каждого локального принтера на сам сервер, что сильно экономит ресурсы и упрощает администрирование.
Однако у технологии EasyPrint есть существенный недостаток. При печати она формирует промежуточный документ в формате XPS. Для того чтобы ускорить передачу задания на печать по сети, Windows применяет алгоритмы сжатия графики (обычно алгоритмы JPEG). Из-за этого сжатия четкие контрастные границы линий штрихкода «замыливаются», появляются артефакты сжатия, и драйвер принтера, пытаясь распечатать этот полутон, применяет растрирование (печать мелкими точками). Сканер штрихкодов такое изображение считать уже не может.
Самый надежный способ вернуть качество печати — заставить сервер использовать «родной» драйвер принтера вместо универсального драйвера EasyPrint. Разберем по шагам, как это сделать вручную для конкретного пользователя, как это было реализовано в исходной проблеме:
В этом случае сервер напрямую формирует задание на печать силами драйвера принтера без использования промежуточного сжатия EasyPrint, и штрихкоды получаются идеально четкими.
Если пользователей много (например, 30 и более), настраивать каждого вручную нерационально. Настроим параметры централизованно через групповые политики. Это заставит сервер всегда пытаться найти родной драйвер в первую очередь.
gpedit.msc).gpupdate /force).Теперь, если на сервере установлен драйвер, совпадающий по имени с локальным принтером пользователя, сервер задействует его, полностью минуя XPS и EasyPrint.
Если установка оригинальных драйверов на сервер по какой-либо причине невозможна, рассмотрим другой подход. Мы можем изменить параметры качества самой технологии XPS, чтобы она не использовала сжатие с потерями (JPEG).
Сохраните настройки. После этого 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 имеют собственные мощные алгоритмы растеризации шрифтов и векторов, которые часто успешно обходят ограничения терминальной печати и выдают на принтер идеальную картинку.
Применяя эти решения в комплексе или по отдельности, вы сможете добиться идеального качества печати штрихкодов на любых принтерах в терминальных сетях любого масштаба.