Как настроить корректный перенос текста по словам при печати этикеток на термопринтере Xprinter?

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

При работе с торговым оборудованием в 1С:УНФ (прежде всего убедитесь, что выполнена базовая инструкция по настройке торгового места на базе РМК) или других конфигурациях пользователи часто сталкиваются со специфической проблемой: при печати этикеток на термопринтерах (например, популярных моделях Xprinter 420B) длинные наименования товаров переносятся некорректно. Вместо того чтобы переносить текст по словам, принтер разрывает слово на полуслове, ориентируясь только на физическую границу области печати. При этом на обычном офисном принтере тот же макет печатается идеально. Разберем детально, почему это происходит и как исправить ситуацию несколькими способами.

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

Прежде всего, нам необходимо понять механику взаимодействия 1С и принтера этикеток. Когда мы отправляем макет на печать, 1С формирует графический или текстовый поток. Часто в системе используются стандартные или внешние печатные формы для 1С:Управление нашей фирмой 3.0, которые по-разному интерпретируются драйвером. Обычные принтеры используют стандартные механизмы Windows (GDI), которые корректно обсчитывают шрифты. Термопринтеры же часто используют внутренние алгоритмы оптимизации. Если в настройках драйвера или 1С указано использование внутренних шрифтов принтера, устройство само решает, где обрезать строку. Выясним, как заставить систему соблюдать правила русского языка и переносить текст по пробелам.

Способ 1: Использование универсального драйвера Seagull Scientific

Одной из самых частых причин проблем с Xprinter является штатное ПО, идущее в комплекте. Рассмотрим вариант замены драйвера на профессиональное решение от Seagull Scientific. Эти драйверы оптимизированы специально для работы с этикеточными принтерами в учетных системах.

  1. Скачаем драйвер Seagull для вашей модели Xprinter.
  2. Установим его, предварительно удалив старое устройство из системы.
  3. В настройках печати убедимся, что границы этикетки соответствуют реальному размеру рулона.

Драйверы от Seagull корректнее передают информацию о границах текстовых полей, что позволяет 1С правильно рассчитать место для переноса строки до того, как данные уйдут в буфер принтера.

Способ 2: Настройка «Печать текста как графики»

Если смена драйвера не помогла или невозможна, проанализируем настройки текущего драйвера. Нам нужно запретить принтеру использовать его встроенные «быстрые» шрифты и заставить его печатать текст как картинку. В этом случае рендеринг (отрисовка) текста происходит на стороне Windows, и 1С управляет каждым пикселем.

  1. Перейдем в Панель управленияУстройства и принтеры.
  2. Нажмем правой кнопкой на принтер и выберем Настройка печати (Printing Preferences).
  3. Найдем вкладку Графика или Параметры страницы.
  4. Установим галочку Печатать текст как графику (Print text as graphics) или снимем флажок с опции Использовать встроенные шрифты.

После включения этого режима принтер перестанет «умничать» и напечатает текст ровно так, как вы видите его в окне предпросмотра 1С.

Способ 3: Корректировка разрешения DPI и границ макета

Разберем ситуацию, когда 1С неправильно вычисляет ширину поля из-за несовпадения разрешения (DPI). Для Xprinter 420B стандартное разрешение составляет 203 dpi. Если в драйвере ошибочно указано 300 или 600, масштаб символов плывет.

Особенно критично это проявляется, когда выполняется массовая печать этикеток и ценников из документа Заказ покупателя или востребованная пользователями печать этикеток и ценников с показом остатков. Попробуем применить «хитрость» с буферной зоной: уменьшим ширину текстового поля внутри ячейки макета на 1-2 мм с каждой стороны. Это заставит алгоритм 1С выполнить перенос слова чуть раньше, не доходя до границы, на которой принтер начинает ломать символы.

Способ 4: Программная обработка строки (для разработчиков)

Если стандартные настройки не помогают, рассмотрим программный метод управления переносами. Мы можем принудительно расставить знаки переноса строк Символы.ПС. Такой метод часто применяется в специализированных решениях, например, когда производится подготовка ячеек адресного склада и нужно уместить длинный адрес хранения на маленькой наклейке.

Предположим, нам нужно ограничить длину строки в 20 символов и переносить только по пробелам:


Функция ПодготовитьНаименованиеДляПечати(ИсходныйТекст, МаксДлинаСтроки)
    МассивСлов = СтрРазбить(ИсходныйТекст, " ");
    Результат = "";
    ТекущаяСтрока = "";
    
    Для Каждого Слово Из МассивСлов Цикл
        Если СтрДлина(ТекущаяСтрока + " " + Слово) <= МаксДлинаСтроки Тогда
            ТекущаяСтрока = ТекущаяСтрока + ?(ПустаяСтрока(ТекущаяСтрока), "", " ") + Слово;
        Иначе
            Результат = Результат + ?(ПустаяСтрока(Результат), "", Символы.ПС) + ТекущаяСтрока;
            ТекущаяСтрока = Слово;
        КонецЕсли;
    КонецЦикла;
    
    Результат = Результат + ?(ПустаяСтрока(Результат), "", Символы.ПС) + ТекущаяСтрока;
    Возврат Результат;
КонецФункции

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

Способ 5: Работа со шрифтами в макете

Выясним, как выбор шрифта влияет на результат. Стандартные шрифты с переменной шириной символов (Arial, Calibri) сложны для расчета драйвером принтера. Проанализируем использование моноширинных шрифтов, таких как Courier New. В моноширинном шрифте каждое слово занимает предсказуемое количество пикселей. Если дизайн этикетки позволяет, установите для поля Наименование шрифт Courier New. Это значительно повышает стабильность работы встроенных функций переноса 1С.

Резюме и рекомендации

Мы рассмотрели различные уровни решения проблемы. Начните с самого простого — проверки свойств ячейки в 1С. Если это не помогает, переходите к настройкам драйвера (печать графикой). В случае использования мобильного оборудования, рекомендуем ознакомиться с особенностями печати на мобильных принтерах по bluetooth и сети, где используются языки ZPL и TSPL. Помните, что связка 1С + Термопринтер очень чувствительна к настройкам DPI, поэтому всегда проверяйте соответствие характеристик в свойствах принтера документации вашего устройства.

← На главную