Skip to content

Шрифты в Docker-образе consumer ​

Коротко ​

В оригинальном Dockerfile upstream нет явных строк вроде fonts-crosextra-carlito / fonts-noto-core, но шрифты в контейнере всё равно были. Они ставились неявно через Recommends пакета libreoffice.

Как было в upstream ​

dockerfile
FROM golang:1.24-bookworm

RUN apt-get update -qq && \
	apt-get -y -q install \
		libreoffice \
		fonts-opensymbol \
		# ... явный список шрифтов ...
        ffmpeg \
        imagemagick \
	&& apt-get -y -q remove libreoffice-gnome && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Важно:

  1. База — полный golang:1.24-bookworm (не slim).
  2. Установка без --no-install-recommends.

В Debian у пакета libreoffice в Recommends входят, среди прочего:

  • fonts-crosextra-carlito — метрический аналог Calibri
  • fonts-crosextra-caladea — аналог Cambria
  • fonts-noto-core / fonts-noto-ui-core
  • fonts-liberation и другие

apt ставит recommends по умолчанию. Поэтому Carlito/Noto есть в образе, хотя в Dockerfile их нет — счета из Битрикс24 (часто Calibri) рендерятся с правильными метриками.

Что ломает вёрстку ​

Если в Dockerfile появляется --no-install-recommends (и/или база debian:bookworm-slim без полного набора recommends), LibreOffice подменяет Calibri на DejaVu → в PDF «плывут» таблицы и цифры.

Нормальный рендерСломанный
Шрифты в PDFCarlito, NotoSansDejaVuSans
Внешний видРовные колонкиПереносы в ячейках сумм

Как должно быть ​

В dockerize/consumer/Dockerfile:

  • не использовать --no-install-recommends при установке LibreOffice или
  • явно ставить fonts-crosextra-carlito, fonts-crosextra-caladea, fonts-noto-core, fonts-noto-ui-core

Корни Let's Encrypt Generation Y (isrg-root-ye / isrg-root-yr) к шрифтам не относятся — они нужны для TLS при скачивании файлов с порталов. См. также Эксплуатация.

Проверка после пересборки ​

bash
docker compose exec consumer fc-list | grep -iE 'carlito|noto|caladea'

В PDF счёта через pdffonts должны быть Carlito/Noto, а не только DejaVuSans.