Почему наезжают друг на друга буквы при печати из 1С на Linux и как это исправить?

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

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

В этой статье мы подробно разберем, почему возникает этот сбой при печати во внешних печатных формах (ВПФ) на Linux, проанализируем технические причины такого поведения платформы и выработаем пошаговый алгоритм решения проблемы.

Выясняем причину: почему это происходит на Linux?

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

  1. Различия в метриках шрифтов (Кернинг и Хинтинг). Даже если вы установили в систему Linux стандартный пакет шрифтов Microsoft (ttf-mscorefonts-installer), движок рендеринга шрифтов в Linux (обычно это связка FreeType и Fontconfig) рассчитывает ширину символов, межсимвольные интервалы и сглаживание иначе, чем подсистема GDI/ClearType в Windows. Из-за этого одна и та же строка, написанная шрифтом Arial, в Linux физически занимает на несколько пикселей больше места.
  2. Скрытая подмена шрифтов (Font Substitution). Графическая подсистема Linux может рапортовать платформе «1С:Предприятие», что шрифт Arial успешно найден и используется. Однако на самом деле библиотека Fontconfig может «на лету» подменять его метрически совместимым аналогом (например, Liberation Sans или DejaVu Sans). Если пропорции символов подмененного шрифта или его жирное начертание (Bold) минимально отличаются от оригинала, текст перестает помещаться в жестко заданные границы ячейки табличного документа.
  3. Сжатие текста при свойстве «Размещение = Авто». В макетах 1С для ячеек по умолчанию часто устанавливается свойство Размещение = Авто. Если при этом высота строки зафиксирована (свойство Высота строки имеет фиксированное значение в пунктах, а не автовысоту), а текст из-за разницы в рендеринге не помещается по ширине, платформа пытается принудительно «втиснуть» его в границы. На Windows алгоритмы сжатия отрабатывают корректно, а на Linux этот механизм часто сбоит, вызывая визуальное наложение букв.
  4. Платформенные особенности и баги. В некоторых релизах платформы «1С:Предприятие» под Linux наблюдаются зарегистрированные ошибки рендеринга жирного начертания для шрифтов семейства Arial при формировании PDF-файлов или выводе на печать напрямую.

Разберем по шагам: как решить проблему с заголовком

Давайте совместно пройдем по цепочке действий, которые помогут гарантированно устранить искажение шрифта в вашей внешней печатной форме.

Шаг 1. Корректировка свойств ячеек в макете 1С

Первое, с чего мы начнем, — это оптимизация структуры самого макета табличного документа. Нам нужно дать тексту больше «свободы», чтобы платформе не приходилось его искусственно сжимать.

  1. Откройте макет вашей внешней печатной формы в конфигураторе.
  2. Найдите проблемную область (ячейку с заголовком, где съезжают буквы).
  3. Попробуйте объединить ячейку заголовка с соседними правыми колонками, сделав область вывода текста шире. Зачастую наезжание букв прекращается сразу, как только у текста появляется физический запас по ширине.
  4. Выделите ячейку заголовка, откройте её свойства (клавиша F4) и измените свойство Размещение со значения Авто на Переносить или Забивать.
  5. Проверьте свойство строки, в которой находится заголовок. Убедитесь, что для свойства Высота строки установлено значение Авто, а не фиксированная высота.

Шаг 2. Проверка реального соответствия шрифтов в системе Linux

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

Зайдите в консоль Linux под тем пользователем, под которым запускается клиентское приложение 1С (или под пользователем usr1cv8 на сервере, если печать генерируется в фоновом задании на стороне сервера приложений), и выполните команду:

fc-match Arial

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

Для исправления подмены вам необходимо установить пакет оригинальных шрифтов Microsoft. В операционных системах на базе Debian/Ubuntu это делается командой:


sudo apt-get update
sudo apt-get install ttf-mscorefonts-installer

После установки обязательно обновите кэш шрифтов в системе:

sudo fc-cache -f -v

Шаг 3. Использование кроссплатформенного шрифта Liberation Sans

Если вы хотите, чтобы печатная форма выглядела абсолютно одинаково и на Windows, и на Linux без необходимости устанавливать проприетарные шрифты Microsoft на каждую рабочую станцию Linux, мы рекомендуем использовать кроссплатформенную альтернативу.

Шрифт Liberation Sans был разработан специально как метрический аналог Arial. Это означает, что ширина каждого символа, межстрочные интервалы и пропорции у них совпадают практически на 100%.

Выделите весь макет печатной формы (сочетание клавиш Ctrl + A в окне макета) и замените шрифт Arial на Liberation Sans. Этот шрифт по умолчанию предустановлен практически во всех дистрибутивах Linux и отлично поддерживается операционной системой Windows. После этого буквы перестанут съезжать.

Шаг 4. Пересохранение макета в Windows-окружении

Как показывает практика практикующих разработчиков 1С, если макет редактировался и сохранялся исключительно в конфигураторе под управлением ОС Linux, XML-структура файла макета (формат .mxl) может записаться с некорректными метаданными шрифтов, ориентированными на UNIX-систему.

Для устранения этой проблемы выполните «нормализацию» макета:

  1. Откройте вашу внешнюю печатную форму в конфигураторе на компьютере с ОС Windows.
  2. Сделайте любое незначительное изменение в проблемной области (например, временно измените размер шрифта заголовка на другой, а затем верните исходный).
  3. Сохраните файл обработки (ВПФ).
  4. Запустите печать на Linux-клиенте. Во многих случаях после перезаписи метаданных в Windows-конфигураторе корректный рендеринг на Linux полностью восстанавливается.

Шаг 5. Синхронизация шрифтов между сервером и клиентом

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

Убедитесь, что пакет шрифтов ttf-mscorefonts-installer (или альтернативный Liberation) установлен как на клиентских машинах, так и на сервере приложений «1С:Предприятия». Если на сервере под управлением Linux нужного шрифта не окажется, то при формировании бинарного потока PDF-документа платформа подставит первый попавшийся шрифт по умолчанию, что гарантированно приведет к искажению верстки и наложению текста.


Резюме

Мы проанализировали проблему наложения букв в заголовках печатных форм 1С на Linux-системах. Для решения этой проблемы рекомендуется действовать комплексно: расширять границы ячеек макета, контролировать системные подмены шрифтов с помощью утилиты fc-match, использовать кроссплатформенный шрифт Liberation Sans вместо Arial и осуществлять финальное сохранение макета ВПФ в конфигураторе под управлением Windows.

← На главную