Запустите LibreOffice в безголовом режиме в Docker для преобразования PDF-файлов.

Да. Для разовых преобразований документов создайте небольшой образ Docker с установленным LibreOffice и запустите soffice --headlessего --convert-to. Смонтируйте входной каталог только для чтения, а отдельный выходной каталог — с правами на запись, чтобы PDF-файл отображался на вашем хосте. В этом примере используется образ на основе Debian и преобразуется один файл DOCX в PDF; LibreOffice не предоставляется в качестве сетевой службы.

В терминале отображается Dockerfile на основе Debian с установленными LibreOffice Writer и шрифтами.
В Dockerfile устанавливается LibreOffice Writer и базовый пакет шрифтов, а затем в качестве команды для контейнера используется soffice.

Что делает безголовый режим и когда Docker полезен?

В безголовом режиме LibreOffice запускается без графического интерфейса. LibreOffice описывает этот режим для использования через командную строку и API, а его параметры командной строки поддерживают преобразование файлов с указанием выходного каталога. Docker упаковывает приложение и его зависимости, поэтому скрипт или рабочая станция могут запускать тот же образ контейнера без установки пакета приложений на хост.

Этот подход хорошо подходит для локальных пакетных заданий, задач CI или бэкенд-воркера, который получает файл и сохраняет преобразованный результат. Обычный безголовый контейнер сам по себе не является HTTP-API для преобразования: он не прослушивает порты и не принимает веб-загрузки. Если вам нужен постоянный сервис, создайте API и очередь заданий вокруг процесса преобразования и добавьте проверку запросов, тайм-ауты, ограничения размера файлов и изоляцию.

1. Создайте папки для ввода и вывода.

На компьютере под управлением Linux или macOS с использованием Bash или аналогичной оболочки создайте папку проекта с отдельными каталогами. Поместите в неё исходный документ inputи оставьте её outputпустой для первого запуска:

mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work

Приведённые ниже команды Docker используют пути в стиле Unix и синтаксис командной оболочки. В Windows измените синтаксис пути хоста для PowerShell или командной строки и убедитесь, что Docker Desktop имеет право совместного использования диска, содержащего эти папки.

2. Создайте образ с помощью LibreOffice.

DockerfileСоздайте внутри файл с именем, lo-workсодержащим следующее:

FROM debian:bookworm-slim

RUN apt-get update && apt-get install -y --no-install-recommends \
    libreoffice-writer fonts-liberation \
    && rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["soffice"]

libreoffice-writerПредоставляет Writer и необходимые фильтры преобразования для распространенных форматов текстовых редакторов. Добавьте libreoffice-calcили, libreoffice-impressесли контейнер должен преобразовывать электронные таблицы или презентации. Пакет шрифтов является лишь базовым; установите шрифты, необходимые для ваших документов и на использование которых у вас есть права, поскольку отсутствующие шрифты могут изменить перенос строк и разрывы страниц.

Создайте образ из каталога, содержащего Dockerfile:

docker build -t lo-headless .

В примере используются имена пакетов Debian Bookworm. Теги базовых образов и пакеты репозитория со временем меняются; для производственной сборки выбирайте поддерживаемый базовый образ, регулярно пересобирайте его для обновлений безопасности и закрепляйте базовый образ по дайджесту, если вам нужны воспроизводимые сборки. Избегайте установки пакетов из несвязанного репозитория только для того, чтобы соответствовать руководству.

В терминале отображается сообщение `docker build -t lo-headless`. Завершается сборка образа контейнера.
Перед запуском контейнера для преобразования соберите локальный образ из Dockerfile.

3. Запустите LibreOffice с отдельными точками монтирования.

Запустите временный контейнер и передайте параметры преобразования после имени образа. Входной каталог доступен только для чтения; запись доступна только в выходной каталог. Параметр --userзапускает процесс с использованием идентификаторов пользователя и группы хоста в Linux, а параметр HOME=/tmpпредоставляет LibreOffice доступный для записи домашний каталог. Измените права доступа к папке, если пользователь хоста не может записывать в output.

docker run --rm \
  --user "$(id -u):$(id -g)" \
  --env HOME=/tmp \
  -v "$PWD/input:/input:ro" \
  -v "$PWD/output:/output" \
  lo-headless \
  --headless --nologo \
  -env:UserInstallation=file:///tmp/lo-profile \
  --convert-to pdf:writer_pdf_Export \
  --outdir /output \
  /input/report.docx

--headlessЭтот процесс отключает графический интерфейс пользователя, --convert-to pdf:writer_pdf_Exportвыбирает фильтр экспорта в PDF и --outdirнаправляет результат в смонтированную выходную папку. Уникальный путь в профиле пользователя предоставляет этому процессу каталог конфигурации LibreOffice с возможностью записи; если вы одновременно выполняете несколько преобразований в одном долгоживущем контейнере, используйте разные пути в профиле для каждого процесса.

Используйте --mountвместо , -vесли вам больше нравится более явный синтаксис монтирования Docker. Привязанные монтирования привязаны к путям на хосте демона Docker, а монтирование с возможностью чтения и записи позволяет процессам контейнера изменять файлы хоста. Держите монтирование узким, избегайте монтирования домашнего каталога или сокета Docker и не запускайте обработчик преобразования документов с ненужными привилегиями.

Команда терминала для запуска контейнера lo-headless с вводом только для чтения, выводом для записи, преобразованием в безголовом режиме и отдельным профилем.
Команда запуска передает исходный файл в soffice, ограничивая при этом доступ хоста к двум папкам проекта.

4. Убедитесь, что PDF-файл создан.

Проверьте выходной каталог хоста после завершения работы Docker:

ls -l output/
file output/report.pdf
test -s output/report.pdf

PDF-файл должен существовать и быть непустым. Откройте его в программе для чтения PDF-файлов и проверьте количество страниц, таблицы, изображения, разрывы страниц и шрифты, прежде чем полагаться на него. Успешное завершение процесса не доказывает, что каждый элемент отображен должным образом, особенно если документ использует шрифты или функции, недоступные в контейнере. Используйте чистую директорию для вывода или новое имя выходного файла для каждого запуска, чтобы старый PDF-файл нельзя было принять за последний преобразованный.

В терминале отображается файл report.pdf в выходной директории, и он идентифицируется как PDF-документ.
Убедитесь, что выходной файл существует и распознается как PDF, затем проверьте страницы на предмет изменений в макете.

Что следует проверить, если преобразование не удалось?

  • Нет выходного файла: подтвердите имя исходного файла и путь к контейнеру, который inputбыл смонтирован в /input, и убедитесь, что каталог хоста outputдоступен для записи выбранным пользователем.
  • Ошибки профиля или блокировки: убедитесь, что -env:UserInstallationпуть доступен для записи. Используйте отдельный каталог профиля для каждого одновременно запущенного процесса LibreOffice.
  • Измененная верстка: установите необходимые шрифты на изображение и просмотрите PDF-файл. Отображение может отличаться от отображения в настольной системе из-за доступности шрифтов, фильтров экспорта и различий в версиях.
  • Ошибка монтирования Docker: убедитесь, что обе директории хоста существуют, прежде чем использовать -vили --mount, и убедитесь, что демон может получить к ним доступ.

Для получения точной информации о поведении параметров см. справочник параметров командной строки LibreOffice . Названия пакетов можно проверить в списке пакетов LibreOffice Writer в Debian Bookworm . В официальной документации Docker объясняется работа с привязанными монтированиями и инструкции для Dockerfile .

Оставить комментарий

Научите LibreOffice распознавать вашу среду выполнения Java.

Научите LibreOffice распознавать вашу среду выполнения Java.

Установите совместимую среду выполнения Java, включите ее в LibreOffice и устраните неполадки, связанные с пустым списком JRE, не изменяя несвязанные настройки.

Запустите LibreOffice в безголовом режиме в Docker для преобразования PDF-файлов.

Запустите LibreOffice в безголовом режиме в Docker для преобразования PDF-файлов.

Создайте небольшой контейнер LibreOffice, конвертируйте офисные документы без графического интерфейса и проверяйте вывод PDF-файлов, ограничивая при этом доступ к файлам на хосте.

Уменьшите размер файлов LibreOffice Impress без размытия изображений.

Уменьшите размер файлов LibreOffice Impress без размытия изображений.

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

Предотвращение обрезки изображений нестандартного размера при печати в LibreOffice

Предотвращение обрезки изображений нестандартного размера при печати в LibreOffice

Перед печатью документа нестандартного размера подберите размеры страницы в LibreOffice в соответствии с размерами вашего принтера, проверьте поля для печати и скорректируйте масштаб.

Ускорьте работу макросов Calc, считывая и записывая данные пакетами.

Ускорьте работу макросов Calc, считывая и записывая данные пакетами.

Замените многократный доступ к ячейкам на массовое чтение и запись диапазонов, затем оцените результаты и защитите формулы в больших рабочих книгах Calc.

Организация книги LibreOffice с помощью связанных мастер-документов.

Организация книги LibreOffice с помощью связанных мастер-документов.

Разделите длинный рукописный текст на главы, соберите их в Writer и обеспечьте единообразие стилей, содержания и проверок при экспорте.

Подключите LibreOffice Base к PostgreSQL с помощью встроенного мастера.

Подключите LibreOffice Base к PostgreSQL с помощью встроенного мастера.

Воспользуйтесь опцией прямого подключения к PostgreSQL в Base, чтобы ввести данные сервера, войти в систему, сохранить файл подключения ODB и устранить распространенные ошибки доступа.

Сделайте пользовательские шрифты доступными для LibreOffice Flatpak

Сделайте пользовательские шрифты доступными для LibreOffice Flatpak

Установите шрифт из папки пользовательских шрифтов Linux, перезапустите LibreOffice Flatpak и убедитесь, что он отображается в Writer, не нарушая работу песочницы приложения.

Остановите сбой сохранения LibreOffice в Сономе: сначала работайте на местах.

Остановите сбой сохранения LibreOffice в Сономе: сначала работайте на местах.

Защитите свою работу и выявите причины сбоев при сохранении файлов на сетевом диске в LibreOffice на macOS Sonoma с помощью подхода, ориентированного на локальные файлы, проверок прав доступа и целевых тестов.

Сохраните идентификаторы CSV-файлов в Calc, импортировав их как текстовый файл.

Сохраните идентификаторы CSV-файлов в Calc, импортировав их как текстовый файл.

Чтобы сохранить ведущие нули в Calc, установите для столбцов ID значение «Текст» во время импорта CSV-файла, проверьте предварительный просмотр и убедитесь, что сохраненные данные корректны.