При формировании этикеток и ценников в системе 1С:Предприятие разработчики часто сталкиваются с проблемой низкого качества отрисовки цифр под штрихкодом. Стандартный шрифт Tahoma, который часто используется внешней компонентой AddIn.КартинкаШтрихкода (или 1CBarCode.dll), при малых размерах этикетки (например, 30х20 мм или 43х25 мм) превращается в нечитаемый набор пикселей. Цифры выглядят «рваными», растянутыми или слишком жирными, что не только портит эстетический вид документа, но и может затруднять ручной ввод данных в случае повреждения «зебры».
Разберем подробно, почему это происходит и какие существуют методы решения этой проблемы — от простой смены шрифта до изменения самой логики вывода текста.
Проанализируем ситуацию: внешняя компонента 1С генерирует штрихкод в виде растрового изображения (картинки). Когда мы задаем область для вывода этой картинки в макете, платформа 1С выполняет масштабирование полученного растра. Если шрифт Tahoma, являющийся пропорциональным, подвергается сильному сжатию при низком разрешении (DPI) принтера этикеток, алгоритмы сглаживания создают те самые «грязные» края.
Выясним причину плохого отображения: шрифт Tahoma имеет разную ширину знаков, что при генерации сетки штрихкода приводит к неравномерному распределению пикселей. Для технических нужд, к которым относится маркировка, гораздо эффективнее использовать моноширинные шрифты.
Рассмотрим первый и самый быстрый способ — замену шрифта в коде программного формирования штрихкода. Моноширинные шрифты гарантируют, что каждый символ занимает одинаковое количество пикселей по горизонтали, что значительно упрощает рендеринг при масштабировании.
Посмотрим на пример кода, который позволяет программно установить шрифт для компоненты:
// Пример установки шрифта для внешней компоненты
Попытка
ИмяШрифта = "Consolas"; // Рекомендуемый вариант
Если ВнешняяКомпонента.НайтиШрифт(ИмяШрифта) Тогда
ВнешняяКомпонента.Шрифт = ИмяШрифта;
Иначе
ВнешняяКомпонента.Шрифт = "Courier New"; // Резервный вариант
КонецЕсли;
ВнешняяКомпонента.РазмерШрифта = 10;
Исключение
// Обработка ошибки доступа к свойствам компоненты
КонецПопытки;
Проанализируем предложенные варианты:
Если вы работаете на современных версиях платформы 1С:Предприятие 8.3, мы настоятельно рекомендуем отказаться от использования внешних dll в пользу встроенного объекта. Начиная с версии 8.3.16, платформа умеет самостоятельно генерировать штрихкоды, и делает это значительно качественнее.
Разберем преимущества этого подхода:
Для реализации этого метода в макете необходимо выбрать тип рисунка «Штрихкод». В свойствах этого объекта можно напрямую указать шрифт и его параметры, которые будут корректно интерпретироваться драйвером принтера.
Это наиболее радикальный, но и самый надежный способ получения идеально четкого текста. Если компонента «уродует» шрифт при масштабировании всей картинки, мы можем просто запретить ей рисовать текст.
Выполним следующие шаги:
ОтображатьТекст (или ShowText) в значение Ложь (0).Почему это работает? При печати текста из ячейки табличного документа платформа 1С передает в спулер печати векторные данные шрифта. Драйвер принтера получает команду «напечатать символ '5' шрифтом Arial», а не команду «напечатать набор черных точек». Это позволяет добиться максимальной резкости, доступной вашему печатающему устройству.
Часто проблема кроется не в самом шрифте, а в несоответствии разрешения генерируемой картинки и физического разрешения принтера. Большинство офисных принтеров работают с 300/600 DPI, а принтеры этикеток — с 203 DPI.
Проанализируем настройки компоненты. В коде можно встретить установку разрешения:
// Установка разрешения для синхронизации с принтером
ВнешняяКомпонента.Разрешение = 203; // Для стандартных термопринтеров Zebra/Argox
Если компонента готовит картинку для 96 DPI (стандарт монитора), а принтер печатает в 203 DPI, происходит пересчет точек, при котором тонкие линии шрифта Tahoma либо исчезают, либо утолщаются вдвое.
Важный совет: В настройках самого драйвера принтера (в Windows) убедитесь, что отключено сглаживание (Dithering). Для печати штрихкодов и мелкого текста должен стоять режим «None» или «Threshold» (Порог), чтобы картинка была строго черно-белой без полутонов.
Мы рассмотрели несколько способов борьбы с плохим качеством шрифтов. Если ваша конфигурация позволяет, лучшим решением будет переход на нативные методы платформы 8.3. Если же вы ограничены использованием внешней компоненты, выполните следующие действия:
Tahoma на Consolas или Lucida Console.Такой комплексный подход позволит вам создавать профессиональные этикетки, которые будут легко считываться сканерами и выглядеть презентабельно для покупателей.