При разработке ценников, этикеток и фирменных печатных форм разработчики часто сталкиваются с ситуацией, когда текст в многострочной ячейке табличного документа выводится с непривычно большим расстоянием между строками. При этом разные шрифты ведут себя по-разному: например, уплотненные шрифты отрисовываются компактно, а популярные гарнитуры (такие как PT Sans) дают визуальный интервал в 1.5 строки и более. Выясним причину такого поведения платформы и разберем проверенные способы решения этой задачи.
Проанализируем механизм отрисовки текста в 1С. В свойствах ячейки ОбластьЯчеекТабличногоДокумента и объекте Шрифт нет параметров управления межстрочным интервалом (аналогов CSS-свойства line-height или абзацных отступов текстовых процессоров). Платформа 1С опирается на стандартные механизмы операционной системы, которые считывают вертикальные метрики (Vertical Metrics) непосредственно из файла используемого шрифта.
Внутри файла шрифта (форматов TTF или OTF) в таблицах OS/2 и hhea зашиты параметры:
Если у шрифта заложены увеличенные параметры межстрочного зазора для веб-читаемости, то в ячейке 1С при автоматическом переносе строк между текстовыми фрагментами образуется ощутимый зазор, который невозможно убрать стандартными флажками оформления.
Если макет должен строго следовать брендбуку и использовать конкретный шрифт в одной многострочной ячейке, наиболее эффективным решением будет модификация самого файла шрифта. Разберем этот процесс по шагам:
.ttf) в специализированном редакторе шрифтов (FontForge, Glyphs или с помощью утилиты TTX из пакета FontTools).TypoLineGap и hhea LineGap равными 0.TypoAscender и TypoDescender, убрав избыточное пустое пространство сверху и снизу от символов.USE_TYPO_METRICS (bit 7 в поле fsSelection), чтобы система применяла заданные типографические метрики..ttf.Если редактирование шрифта невозможно по техническим или лицензионным причинам, применим программное разделение текста на отдельные строки макета с фиксированной высотой строки. Разберем реализацию этого подхода:
ВысотаСтроки в пунктах.Обрезать или НеПереносить).Посмотрим на пример программного заполнения таких строк:
ВысотаСтрокиТекста = 12; // Точная высота в пунктах
МассивСтрок = СтрРазделить(ТекстНаименования, Символы.ПС, Ложь);
Для Каждого ТекСтрока Из МассивСтрок Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаТекста");
ОбластьСтрока.Параметры.Текст = ТекСтрока;
// Управляем плотностью расположения строк
ОбластьСтрока.Область().ВысотаСтроки = ВысотаСтрокиТекста;
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Когда требуется микроверстка для компактных этикеток (например, 30х20 мм), можно отказаться от табличной сетки в пользу объектов рисования. Рассмотрим последовательность действий:
Рисунки табличного документа, передавая нужные строки в свойство Текст.Если требования дизайнеров к типографике строгие (требуются точный line-height, отрицательный трекинг и кернинг), целесообразно сформировать ценник в виде HTML-разметки:
line-height: 0.9;, letter-spacing: -0.5px;.