Как уменьшить межстрочный интервал в ячейках табличного документа 1С?

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

При разработке ценников, этикеток и фирменных печатных форм разработчики часто сталкиваются с ситуацией, когда текст в многострочной ячейке табличного документа выводится с непривычно большим расстоянием между строками. При этом разные шрифты ведут себя по-разному: например, уплотненные шрифты отрисовываются компактно, а популярные гарнитуры (такие как PT Sans) дают визуальный интервал в 1.5 строки и более. Выясним причину такого поведения платформы и разберем проверенные способы решения этой задачи.

Почему возникает увеличенный межстрочный интервал

Проанализируем механизм отрисовки текста в 1С. В свойствах ячейки ОбластьЯчеекТабличногоДокумента и объекте Шрифт нет параметров управления межстрочным интервалом (аналогов CSS-свойства line-height или абзацных отступов текстовых процессоров). Платформа 1С опирается на стандартные механизмы операционной системы, которые считывают вертикальные метрики (Vertical Metrics) непосредственно из файла используемого шрифта.

Внутри файла шрифта (форматов TTF или OTF) в таблицах OS/2 и hhea зашиты параметры:

  1. LineGap (TypoLineGap) — дополнительный межстрочный зазор по умолчанию.
  2. Ascender / Descender (а также WinAscent / WinDescent) — верхние и нижние границы выносных элементов символов, формирующие безопасные поля вокруг глифов.

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

Способ 1. Корректировка вертикальных метрик в файле шрифта

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

  1. Откроем исходный файл шрифта (например, .ttf) в специализированном редакторе шрифтов (FontForge, Glyphs или с помощью утилиты TTX из пакета FontTools).
  2. Перейдем в настройки метрик шрифта (обычно раздел Font Info -> OS/2 Metrics и hhea Metrics).
  3. Установим значения межстрочного зазора TypoLineGap и hhea LineGap равными 0.
  4. При необходимости скорректируем поля TypoAscender и TypoDescender, убрав избыточное пустое пространство сверху и снизу от символов.
  5. Проверим наличие флага USE_TYPO_METRICS (bit 7 в поле fsSelection), чтобы система применяла заданные типографические метрики.
  6. Сохраним шрифт под новым уникальным системным именем, чтобы избежать конфликтов с оригинальной гарнитурой, и сгенерируем новый файл .ttf.
  7. Установим полученный шрифт на сервере и клиентских компьютерах, после чего выберем его в свойствах ячеек макета 1С.

Способ 2. Построчный вывод текста в отдельные строки таблицы

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

  1. В макете табличного документа вместо одной высокой ячейки создадим несколько отдельных строк.
  2. Для каждой строки отключим свойство Автовысота строки и зададим точное значение свойства ВысотаСтроки в пунктах.
  3. Для ячеек отключим автоматический перенос (свойство РазмещениеТекста установим в значение Обрезать или НеПереносить).
  4. Программно разобьем длинное наименование на массив строк заданной длины и выведем каждую строку в свою секцию макета.

Посмотрим на пример программного заполнения таких строк:


ВысотаСтрокиТекста = 12; // Точная высота в пунктах

МассивСтрок = СтрРазделить(ТекстНаименования, Символы.ПС, Ложь);
Для Каждого ТекСтрока Из МассивСтрок Цикл
    ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТекста");
    ОбластьСтрока.Параметры.Текст = ТекСтрока;
    
    // Управляем плотностью расположения строк
    ОбластьСтрока.Область().ВысотаСтроки = ВысотаСтрокиТекста;
    ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;

Способ 3. Использование графических надписей и текстовых блоков

Когда требуется микроверстка для компактных этикеток (например, 30х20 мм), можно отказаться от табличной сетки в пользу объектов рисования. Рассмотрим последовательность действий:

  1. В макете табличного документа через меню добавления объектов вставим элемент Текст (объект графического слоя табличного документа).
  2. Разместим текстовые надписи с абсолютным позиционированием по вертикали, перекрывая границы ячеек и придвигая строки друг к другу на нужное расстояние в миллиметрах.
  3. Для вывода динамических данных будем обращаться к объектам коллекции Рисунки табличного документа, передавая нужные строки в свойство Текст.

Способ 4. Формирование ценников на базе HTML

Если требования дизайнеров к типографике строгие (требуются точный line-height, отрицательный трекинг и кернинг), целесообразно сформировать ценник в виде HTML-разметки:

  1. Создадим шаблон HTML с блоком стилей, где для текста заданы точные параметры: line-height: 0.9;, letter-spacing: -0.5px;.
  2. Заполним параметры макета программно и отобразим результат в поле HTML-документа или распечатаем напрямую средствами платформы.
← На главную