Шрифт не виден в 1С или печать «поехала»: куда его ставить и как проверить
Содержание
В 1С нет своего хранилища шрифтов: платформа 8.3 берёт их из операционной системы. Чтобы добавить шрифт в 1С, его устанавливают в Windows или Linux на тот компьютер, где документ рисуется, а затем перезапускают клиент 1С. Если печатную форму или PDF формирует сервер 1С, шрифт нужен ещё и на сервере, после чего его службу перезапускают.
Выбор места установки зависит от сценария. Обычная печать из толстого или тонкого клиента — шрифт ставят на рабочее место пользователя. Терминальный сервер — на сам терминальный сервер, для всех пользователей. Фоновые задания, рассылка счетов в PDF, веб-клиент с выгрузкой в PDF — на каждый рабочий сервер кластера 1С.
Какие файлы шрифтов подходят и что проверить до установки
Шрифт приходит в одном из форматов. От формата зависит, как он поведёт себя в печатной форме.
| Формат | Что это | Как ведёт себя в 1С |
|---|---|---|
.ttf | TrueType, одно начертание в файле | Самый предсказуемый вариант для печатных форм и PDF |
.ttc | Коллекция TrueType, несколько начертаний | Устанавливается целиком, работает как обычный TrueType |
.otf | OpenType | На экране обычно в порядке, но PDF и печать проверьте на тестовом документе |
.otc | Коллекция OpenType | Нужна современная ОС; перед массовым внедрением проверьте на одном компьютере |
.fon, .pfb | Растровые и Type 1 | Для печатных форм 1С не годятся |
Перед установкой сделайте три проверки:
- 🔤 Есть ли кириллица. Откройте файл двойным щелчком: в окне просмотра Windows видно, какие символы есть в шрифте. Многие бесплатные шрифты содержат только латиницу, и 1С подставит вместо них другой шрифт.
- 🔣 Есть ли нужные знаки. Для счетов важны
₽,№,«», длинное тире. Их удобно проверить в стандартной программе «Таблица символов» (charmap). - 🏷️ Как шрифт называется внутри. Имя файла и имя шрифта — разные вещи. Файл
PTS55F.ttfв системе называется «PT Sans». Макет 1С ссылается именно на внутреннее имя, поэтому сверяйте его.
Отдельный вопрос — лицензия. Шрифты Windows (Arial, Times New Roman, Calibri) лицензированы вместе с системой. Копировать их на Linux-сервер без разрешения правообладателя нельзя, для Linux есть легальные пакеты, о них ниже.
Если макет печатной формы делали в чужой базе, откройте его в Конфигураторе и посмотрите шрифт ячеек в палитре свойств. Так вы узнаете точное имя шрифта, который нужно найти и поставить.
Установка шрифта в Windows, чтобы 1С его увидела
В Windows 10 и 11 есть два способа установки, и для 1С разница между ними принципиальная.
Порядок действий:
- Закройте 1С на этом компьютере.
- Щёлкните правой кнопкой по файлу
.ttfили.otf. - Выберите «Установить для всех пользователей». Для этого нужны права администратора.
- Дождитесь, пока файл появится в папке
C:\Windows\Fonts. - Запустите 1С и откройте печатную форму или настройку шрифта, чтобы убедиться, что новое имя есть в списке.
Пункт «Установить» без уточнения ставит шрифт только текущему пользователю. Файл ложится в профиль, в %LOCALAPPDATA%\Microsoft\Windows\Fonts, и его не видят другие учётные записи.
Шрифт, установленный только для себя, не увидят служба сервера 1С и другие пользователи терминального сервера. Это самая частая причина ситуации «у меня печатается правильно, а у бухгалтера — нет».
Третий способ — через параметры системы: Параметры → Персонализация → Шрифты. Туда можно перетащить файл мышью. Он тоже по умолчанию ставит шрифт для текущего пользователя, поэтому для 1С удобнее контекстное меню.
Проверить, где шрифт установлен, можно в PowerShell:
# Шрифты для всех пользователей
Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" | Format-List
# Шрифты только текущего пользователя
Get-ItemProperty "HKCU:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" | Format-List
Если нужный шрифт есть только во втором списке, удалите его и поставьте заново с выбором «для всех пользователей».
Терминальный сервер и RDP
На терминальном сервере шрифт ставят на сам сервер, а не на компьютер, с которого подключаются. Перед установкой переведите сервер в режим установки командой change user /install, после установки верните обратно: change user /execute. Пользователям, которые уже работают, понадобится закрыть 1С и открыть её снова.
Шрифты для 1С на Linux и в тонком клиенте
Клиент и сервер 1С на Linux ищут шрифты через библиотеку fontconfig. Если подходящего шрифта нет, текст рисуется заменой, а ширина символов меняется. В итоге строки обрезаются, а печатная форма вылезает на вторую страницу.
Базовый набор: шрифты Microsoft
Типовые макеты 1С свёрстаны в основном шрифтом Arial, реже Times New Roman и Courier New. На Linux их ставят из пакета, который скачивает оригинальные файлы с принятием лицензии Microsoft.
# Debian, Ubuntu, Astra Linux (нужен компонент contrib / multiverse)
sudo apt install ttf-mscorefonts-installer fontconfig
# Проверка, что Arial появился
fc-list | grep -i arial
fc-match "Arial"
fc-match показывает, какой файл реально подставится по запросу. Если в ответ на «Arial» приходит DejaVuSans.ttf или LiberationSans, значит, Arial в системе нет и работает замена.
В дистрибутивах семейства Red Hat (РЕД ОС, AlmaLinux) пакета с таким именем в стандартных репозиториях нет. Шрифты Microsoft там ставят из пакета, собранного по инструкции дистрибутива, либо вручную копируют файлы, если на это есть лицензия.
Свой шрифт вручную
Для фирменного или нестандартного шрифта:
- Скопируйте файлы в общую папку:
/usr/local/share/fonts/(или подпапку в ней). - Выставьте права на чтение для всех:
sudo chmod 644 /usr/local/share/fonts/*.ttf. - Обновите кэш:
sudo fc-cache -f -v. - Проверьте:
fc-list | grep -i "имя шрифта". - Закройте и снова запустите клиент 1С.
Папка ~/.local/share/fonts тоже работает, но только для одного пользователя. Сервер 1С работает под своей учётной записью (обычно usr1cv8) и шрифтов из чужого домашнего каталога не увидит.
Тонкий клиент и веб-клиент
Тонкий клиент рисует формы и печать на компьютере пользователя, поэтому шрифт нужен там, где запущен 1cv8c. Под Windows — как в разделе выше, под Linux — через fontconfig.
С веб-клиентом сложнее. Экранные формы отображает браузер со своими шрифтами. А вот PDF и картинки, которые 1С формирует на сервере, зависят от шрифтов сервера.
Шрифты на сервере 1С: печатные формы, PDF и рассылки
Когда печатную форму формирует сервер, клиентские шрифты не участвуют. Типичные случаи:
- 📧 рассылка счетов и актов в PDF по расписанию;
- 📎 вложения в электронные письма, которые создаются регламентным заданием;
- 🌐 сохранение табличного документа в PDF из веб-клиента;
- 🔁 печать в фоне при обмене с ЭДО или сайтом.
Шрифт ставят на каждый рабочий сервер кластера, где могут работать рабочие процессы rphost. Если серверов два, а шрифт есть на одном, PDF будет то правильным, то «кривым» — в зависимости от того, какой процесс обработал вызов.
Порядок для Windows-сервера:
- Установите шрифт «для всех пользователей».
- Проверьте, что он появился в
C:\Windows\Fontsи в ветке реестраHKLM, как показано выше. - Перезапустите службу «Агент сервера 1С:Предприятия 8.3» в оснастке
services.msc.
Порядок для Linux-сервера:
- Установите шрифт в
/usr/share/fontsили/usr/local/share/fonts, выполнитеfc-cache -f -v. - Проверьте под учётной записью сервера:
sudo -u usr1cv8 fc-match "Arial". - Найдите имя службы:
systemctl list-units --type=service | grep -i 1c— оно зависит от версии платформы. - Перезапустите её:
sudo systemctl restart <имя службы>.
Перезапуск службы сервера 1С обрывает все сеансы пользователей, несохранённые документы будут потеряны. Делайте это вне рабочего времени или предупредите сотрудников заранее и попросите выйти из базы.
Перезапуск нужен потому, что рабочие процессы получают список шрифтов при старте. Новый шрифт, добавленный в систему на работающем сервере, они могут не увидеть до перезапуска.
Квадраты, «кракозябры» и подмена шрифта: как найти причину
Проблемы со шрифтами выглядят по-разному. Узнайте свой симптом и начните с соответствующей проверки.
Если диагностика не дала ответа, проверьте сам макет. В Конфигураторе откройте печатную форму, выделите проблемную область и посмотрите шрифт в палитре свойств. Встречаются макеты, где ячейки заданы шрифтом, которого нет ни у кого, кроме разработчика формы.
Подмена шрифта в макете без правки типовой конфигурации
Если шрифт нельзя поставить на все компьютеры, проще поменять шрифт в макете. Для типовой конфигурации на поддержке правьте не саму конфигурацию, а внешнюю печатную форму или расширение. Тогда обновления не сотрут изменения и не потребуют снимать конфигурацию с поддержки.
Для форм, которые хранятся в базе как пользовательские макеты, во многих типовых конфигурациях есть отдельный список макетов печатных форм. Его ищут в разделе Администрирование → Печатные формы, отчёты и обработки. Там макет можно открыть, поменять шрифт ячеек и сохранить как свой. Пункты списка зависят от конфигурации и её релиза.
Массовая установка шрифтов: GPO, PowerShell и Linux
Ставить шрифт руками на 40 рабочих мест долго, и легко пропустить один компьютер. Для домена Windows удобнее групповая политика.
Через групповые политики (GPO)
В шрифте два элемента: сам файл в C:\Windows\Fonts и запись в реестре. Без записи в реестре Windows файл не подхватит. В объекте групповой политики для компьютеров используйте настройки (Preferences):
- Файлы.
Конфигурация компьютера → Настройка → Конфигурация Windows → Файлы. Источник — файл шрифта в сетевой папке, доступной компьютерам домена на чтение. Назначение —%WindowsDir%\Fonts\PTSans-Regular.ttf. - Реестр. Там же, раздел
Реестр. КустHKEY_LOCAL_MACHINE, ключSOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts. Имя параметра — внутреннее имя шрифта с пометкой формата, напримерPT Sans (TrueType), значение — имя файлаPTSans-Regular.ttf. - Привяжите политику к подразделению с компьютерами бухгалтерии и перезагрузите один компьютер для проверки.
Скрипт PowerShell
Для серверов вне домена и для разовых задач хватит скрипта, запущенного от администратора:
$src = "\\fileserver\soft\fonts"
Get-ChildItem $src -Include *.ttf, *.otf -Recurse | ForEach-Object {
$dest = Join-Path "$env:WINDIR\Fonts" $_.Name
if (-not (Test-Path $dest)) {
Copy-Item $_.FullName $dest
$shell = New-Object -ComObject Shell.Application
$name = $shell.Namespace($_.DirectoryName).ParseName($_.Name).ExtendedProperty("System.Title")
$kind = if ($_.Extension -eq ".otf") { "OpenType" } else { "TrueType" }
New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" `
-Name "$name ($kind)" -Value $_.Name -PropertyType String -Force | Out-Null
}
}
Скрипт копирует каждый шрифт в системную папку и прописывает его в реестре. Имя шрифта он берёт из свойств файла. Если для какого-то файла имя пришло пустым, впишите его вручную.
Linux: один шаг в общем сценарии
На Linux достаточно положить файлы в /usr/local/share/fonts и выполнить fc-cache -f. Если машины разворачивают Ansible или Salt, добавьте эти два шага в роль, которая ставит клиент 1С. Пакет ttf-mscorefonts-installer тоже ставьте в той же роли: тогда новое рабочее место сразу печатает так же, как остальные.