При переходе на операционные системы семейства Linux пользователи и разработчики «1С:Предприятия» часто сталкиваются со специфическими проблемами отображения интерфейса и печатных форм. Одна из наиболее распространенных и неприятных проблем — искажение текста в печатных формах, когда буквы в заголовках или таблицах начинают «наезжать» друг на друга, превращаясь в нечитаемую «кашу». При этом на Windows-клиентах та же самая печатная форма отображается идеально.
В этой статье мы подробно разберем, почему возникает этот сбой при печати во внешних печатных формах (ВПФ) на Linux, проанализируем технические причины такого поведения платформы и выработаем пошаговый алгоритм решения проблемы.
Для того чтобы эффективно устранить проблему, нам необходимо понять физику процесса рендеринга шрифтов в различных операционных системах. Разберем основные технические факторы, которые приводят к искажению текста:
ttf-mscorefonts-installer), движок рендеринга шрифтов в Linux (обычно это связка FreeType и Fontconfig) рассчитывает ширину символов, межсимвольные интервалы и сглаживание иначе, чем подсистема GDI/ClearType в Windows. Из-за этого одна и та же строка, написанная шрифтом Arial, в Linux физически занимает на несколько пикселей больше места.Arial успешно найден и используется. Однако на самом деле библиотека Fontconfig может «на лету» подменять его метрически совместимым аналогом (например, Liberation Sans или DejaVu Sans). Если пропорции символов подмененного шрифта или его жирное начертание (Bold) минимально отличаются от оригинала, текст перестает помещаться в жестко заданные границы ячейки табличного документа.Размещение = Авто. Если при этом высота строки зафиксирована (свойство Высота строки имеет фиксированное значение в пунктах, а не автовысоту), а текст из-за разницы в рендеринге не помещается по ширине, платформа пытается принудительно «втиснуть» его в границы. На Windows алгоритмы сжатия отрабатывают корректно, а на Linux этот механизм часто сбоит, вызывая визуальное наложение букв.Arial при формировании PDF-файлов или выводе на печать напрямую.Давайте совместно пройдем по цепочке действий, которые помогут гарантированно устранить искажение шрифта в вашей внешней печатной форме.
Первое, с чего мы начнем, — это оптимизация структуры самого макета табличного документа. Нам нужно дать тексту больше «свободы», чтобы платформе не приходилось его искусственно сжимать.
Размещение со значения Авто на Переносить или Забивать.Высота строки установлено значение Авто, а не фиксированная высота.Теперь нам нужно убедиться, что система Linux не подменяет шрифт Arial другим семейством. Для этого выполним диагностику через терминал операционной системы.
Зайдите в консоль Linux под тем пользователем, под которым запускается клиентское приложение 1С (или под пользователем usr1cv8 на сервере, если печать генерируется в фоновом задании на стороне сервера приложений), и выполните команду:
fc-match Arial
Проанализируем результат выполнения команды:
Arial.ttf: "Arial" "Regular", значит, оригинальные шрифты установлены корректно.LiberationSans-Regular.ttf: "Liberation Sans" "Regular", это означает, что в системе происходит скрытая подмена.Для исправления подмены вам необходимо установить пакет оригинальных шрифтов Microsoft. В операционных системах на базе Debian/Ubuntu это делается командой:
sudo apt-get update
sudo apt-get install ttf-mscorefonts-installer
После установки обязательно обновите кэш шрифтов в системе:
sudo fc-cache -f -v
Если вы хотите, чтобы печатная форма выглядела абсолютно одинаково и на Windows, и на Linux без необходимости устанавливать проприетарные шрифты Microsoft на каждую рабочую станцию Linux, мы рекомендуем использовать кроссплатформенную альтернативу.
Шрифт Liberation Sans был разработан специально как метрический аналог Arial. Это означает, что ширина каждого символа, межстрочные интервалы и пропорции у них совпадают практически на 100%.
Выделите весь макет печатной формы (сочетание клавиш Ctrl + A в окне макета) и замените шрифт Arial на Liberation Sans. Этот шрифт по умолчанию предустановлен практически во всех дистрибутивах Linux и отлично поддерживается операционной системой Windows. После этого буквы перестанут съезжать.
Как показывает практика практикующих разработчиков 1С, если макет редактировался и сохранялся исключительно в конфигураторе под управлением ОС Linux, XML-структура файла макета (формат .mxl) может записаться с некорректными метаданными шрифтов, ориентированными на UNIX-систему.
Для устранения этой проблемы выполните «нормализацию» макета:
Если формирование печатной формы происходит на стороне сервера (например, при использовании серверного вызова или в фоновом задании), а клиент лишь получает готовый табличный документ для отображения или сохранения в PDF, критически важно обеспечить идентичность окружения.
Убедитесь, что пакет шрифтов ttf-mscorefonts-installer (или альтернативный Liberation) установлен как на клиентских машинах, так и на сервере приложений «1С:Предприятия». Если на сервере под управлением Linux нужного шрифта не окажется, то при формировании бинарного потока PDF-документа платформа подставит первый попавшийся шрифт по умолчанию, что гарантированно приведет к искажению верстки и наложению текста.
Мы проанализировали проблему наложения букв в заголовках печатных форм 1С на Linux-системах. Для решения этой проблемы рекомендуется действовать комплексно: расширять границы ячеек макета, контролировать системные подмены шрифтов с помощью утилиты fc-match, использовать кроссплатформенный шрифт Liberation Sans вместо Arial и осуществлять финальное сохранение макета ВПФ в конфигураторе под управлением Windows.