Как улучшить качество и заменить шрифт Tahoma в штрихкоде 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей
← На главную

При формировании этикеток и ценников в системе 1С:Предприятие разработчики часто сталкиваются с проблемой низкого качества отрисовки цифр под штрихкодом. Стандартный шрифт Tahoma, который часто используется внешней компонентой AddIn.КартинкаШтрихкода (или 1CBarCode.dll), при малых размерах этикетки (например, 30х20 мм или 43х25 мм) превращается в нечитаемый набор пикселей. Цифры выглядят «рваными», растянутыми или слишком жирными, что не только портит эстетический вид документа, но и может затруднять ручной ввод данных в случае повреждения «зебры».

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

Анализ причины проблемы: почему Tahoma не подходит

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

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

Решение №1: Переход на моноширинные шрифты

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

Посмотрим на пример кода, который позволяет программно установить шрифт для компоненты:


// Пример установки шрифта для внешней компоненты
Попытка
    ИмяШрифта = "Consolas"; // Рекомендуемый вариант
    Если ВнешняяКомпонента.НайтиШрифт(ИмяШрифта) Тогда
        ВнешняяКомпонента.Шрифт = ИмяШрифта;
    Иначе
        ВнешняяКомпонента.Шрифт = "Courier New"; // Резервный вариант
    КонецЕсли;
    ВнешняяКомпонента.РазмерШрифта = 10;
Исключение
    // Обработка ошибки доступа к свойствам компоненты
КонецПопытки;

Проанализируем предложенные варианты:

  1. Consolas: Современный моноширинный шрифт с четкими очертаниями. Он отлично сохраняет читаемость даже при уменьшении кегля до 8-9 пунктов.
  2. Courier New: Классический вариант, который есть в любой системе Windows. Несмотря на некоторую «старомодность», его тонкие линии меньше подвержены «расплыванию» при печати на термопринтерах.
  3. OCR-B: Это специализированный шрифт, разработанный специально для систем оптического распознавания символов и штрихкодирования. Если данный шрифт установлен в вашей операционной системе, он будет идеальным выбором для EAN-13 и других стандартов.

Решение №2: Использование нативных средств платформы (1С 8.3.16+)

Если вы работаете на современных версиях платформы 1С:Предприятие 8.3, мы настоятельно рекомендуем отказаться от использования внешних dll в пользу встроенного объекта. Начиная с версии 8.3.16, платформа умеет самостоятельно генерировать штрихкоды, и делает это значительно качественнее.

Разберем преимущества этого подхода:

Для реализации этого метода в макете необходимо выбрать тип рисунка «Штрихкод». В свойствах этого объекта можно напрямую указать шрифт и его параметры, которые будут корректно интерпретироваться драйвером принтера.

Решение №3: Разделение графики и текста

Это наиболее радикальный, но и самый надежный способ получения идеально четкого текста. Если компонента «уродует» шрифт при масштабировании всей картинки, мы можем просто запретить ей рисовать текст.

Выполним следующие шаги:

  1. В настройках компоненты установите свойство ОтображатьТекст (или ShowText) в значение Ложь (0).
  2. В макете табличного документа под областью, где выводится штрихкод, создайте отдельную текстовую ячейку.
  3. В эту ячейку выводите код товара обычным текстом 1С.

Почему это работает? При печати текста из ячейки табличного документа платформа 1С передает в спулер печати векторные данные шрифта. Драйвер принтера получает команду «напечатать символ '5' шрифтом Arial», а не команду «напечатать набор черных точек». Это позволяет добиться максимальной резкости, доступной вашему печатающему устройству.

Решение №4: Настройка DPI и параметров драйвера принтера

Часто проблема кроется не в самом шрифте, а в несоответствии разрешения генерируемой картинки и физического разрешения принтера. Большинство офисных принтеров работают с 300/600 DPI, а принтеры этикеток — с 203 DPI.

Проанализируем настройки компоненты. В коде можно встретить установку разрешения:


// Установка разрешения для синхронизации с принтером
ВнешняяКомпонента.Разрешение = 203; // Для стандартных термопринтеров Zebra/Argox

Если компонента готовит картинку для 96 DPI (стандарт монитора), а принтер печатает в 203 DPI, происходит пересчет точек, при котором тонкие линии шрифта Tahoma либо исчезают, либо утолщаются вдвое.

Важный совет: В настройках самого драйвера принтера (в Windows) убедитесь, что отключено сглаживание (Dithering). Для печати штрихкодов и мелкого текста должен стоять режим «None» или «Threshold» (Порог), чтобы картинка была строго черно-белой без полутонов.

Итоги и рекомендации

Мы рассмотрели несколько способов борьбы с плохим качеством шрифтов. Если ваша конфигурация позволяет, лучшим решением будет переход на нативные методы платформы 8.3. Если же вы ограничены использованием внешней компоненты, выполните следующие действия:

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

← На главную