Главная /
Документация /
Генерация PDF из DOCX в Telegram-боте на Bothost: LibreOffice headless
Генерация PDF из DOCX в Telegram-боте на Bothost: LibreOffice headless
Генерация PDF из DOCX в Telegram-боте на Bothost: LibreOffice headless
На платформе Bothost боты работают в Docker-контейнерах — это удобно для деплоя Telegram-, Discord- и MAX-ботов из Git, но стандартный образ не включает системные пакеты вроде LibreOffice. Если вашему боту нужно конвертировать файлы .docx в .pdf (договоры, справки, отчёты, счета по шаблону), установите LibreOffice headless через кастомный Dockerfile.
LibreOffice headless — это полноценный офисный пакет в фоновом режиме без графического интерфейса. Такой подход подходит для Python-ботов на aiogram, Node.js-ботов и других проектов, развёрнутых на хостинге ботов Bothost: пользователь отправляет .docx в чат, бот возвращает готовый PDF.
Способ 1: Кастомный Dockerfile (рекомендуется)
Добавьте в корень репозитория файл Dockerfile и поставьте галочку «Использовать собственный Dockerfile» при создании бота.
Важно:fonts-dejavu и fonts-liberation — обязательны. Без них кириллица и стандартные шрифты (Arial, Times New Roman) в PDF будут отображаться некорректно.
Конвертация DOCX → PDF в коде
После добавления LibreOffice в образ используйте его через subprocess:
LibreOffice добавляет ~400–500 МБ. Первая сборка займёт 3–5 минут, повторные — быстрее за счёт кеша
Кириллица
Без пакетов fonts-dejavu / fonts-liberation кириллические символы могут отображаться как квадраты
Параллельные запросы
LibreOffice запускается как отдельный процесс при каждой конвертации. Для высокой нагрузки рассмотрите очередь задач
Поддерживаемые форматы
Помимо .docx, LibreOffice конвертирует .odt, .doc, .xlsx, .pptx и другие офисные форматы
---
Типичные ошибки
LibreOffice не запускается / ошибка профиля
Убедитесь, что в Dockerfile есть ENV HOME=/root. LibreOffice создаёт временный профиль в домашней директории.
Шрифты отображаются некорректно
Установите fonts-dejavu и fonts-liberation. Для специфических шрифтов скопируйте .ttf-файлы в /usr/local/share/fonts/ и выполните fc-cache -f.
Процесс завис
Добавьте timeout=60 в subprocess.run(). LibreOffice иногда зависает на повреждённых файлах.
Когда это нужно боту
Типичные сценарии на Bothost: бот принимает Word-шаблон и отдаёт PDF клиенту; автоматическая выдача договоров и актов в Telegram; конвертация загруженных документов без отдельного сервера. Всё выполняется внутри контейнера вашего бота — достаточно добавить Dockerfile в репозиторий и включить опцию «Использовать собственный Dockerfile» при создании бота.