Гид по технологиям

Массовая конверсия документов с unoconv

4 min read Linux Обновлено 29 Oct 2025
Массовая конверсия документов с unoconv
Массовая конверсия документов с unoconv

LibreOffice (и его предшественник OpenOffice) давно служат основным инструментом для создания текстов, таблиц и презентаций в Linux. Формат Open Document (ODF) отлично работает внутри открытого стека, но иногда нужно обменяться файлами с пользователем проприетарной платформы. Если файлов много, вместо ручного «Сохранить как…» удобнее автоматизировать процесс — для этого существует unoconv.

unoconv — это программа командной строки, которая делает ровно одно: читает файлы в одном формате и записывает их в другом, используя установленный Libre/OpenOffice для выполнения преобразований.

Установка

На Ubuntu и большинстве Debian-подобных дистрибутивов LibreOffice уже установлен. Сам unoconv устанавливается одной командой (с исправлением часто встречающейся опечатки):

sudo apt-get install unoconv

После установки убедитесь, что команды unoconv и soffice доступны в PATH.

Быстрый пример использования

Синтаксис простой. Чтобы посмотреть, какие форматы поддерживаются:

unoconv --show

Флаги, которые чаще всего понадобятся:

  • -f — указать формат вывода, например -f pdf.
  • -o — указать выходной каталог или файл (по умолчанию — текущая директория).
  • -t — применить файл как шаблон (шаблон должен быть в целевом формате).
  • -c — подключиться к уже запущенному экземпляру LibreOffice (чтобы избежать задержек при старте).

Пример: конвертировать все документы MS Word (2000/2003) в текущей папке в ODT и поместить результат в папку proper_format:

unoconv -f odt -o proper_format *.doc

Полезные советы и нюансы

  • unoconv использует LibreOffice для преобразования. При запуске он может стартовать экземпляр LibreOffice в фоновом режиме, что займет время. При массовой обработке экономнее предварительно запустить LibreOffice в режиме прослушивания и подключаться к нему.
  • Шаблоны: флаг -t path/to/template.odt применит указанный шаблон к каждому файлу при сохранении в формат ODT.
  • Защищённые паролем документы не конвертируются без предварительного снятия защиты.
  • Макросы и проприетарные расширения могут не перенестись корректно — ожидайте потери функционала в сложных документах.

Работа через прослушиватель LibreOffice (ускорение)

Чтобы избежать длительного старта LibreOffice при каждой конверсии, можно запустить его once в «headless» режиме и подключаться к этому процессу:

soffice --headless --accept="socket,host=127.0.0.1,port=2002;urp;" &

А затем использовать unoconv с опцией -c:

unoconv -c "socket,host=127.0.0.1,port=2002;urp;" -f pdf file.docx

Это особенно полезно для пакетных задач и CI/CD, где время старта критично.

Альтернативные подходы

  • soffice (LibreOffice) напрямую: для простых массовых преобразований можно обойтись без unoconv:
soffice --headless --convert-to pdf *.docx --outdir output_folder
  • Pandoc: хорош для конверсии между текстовыми форматами (Markdown, HTML, DOCX, LaTeX). Pandoc не всегда корректно конвертирует сложные DOC/DOCX с продвинутой версткой.

  • Коммерческие конвертеры и сервисы API: когда требуется гарантированное соответствие проприетарным стандартам (например, сложные таблицы, макросы), стоит рассмотреть платные решения.

Скрипт для пакетной обработки (например, конвертация в PDF)

Простой bash-скрипт, создающий выходную папку и обрабатывающий по 1 файлу за раз:

#!/bin/bash
mkdir -p converted_pdf
for f in *.docx *.doc; do
  echo "Converting $f"
  unoconv -f pdf -o converted_pdf "$f"
done

Для параллельной обработки используйте GNU parallel или xargs с осторожностью: LibreOffice может потреблять много памяти, и параллельный запуск нескольких экземпляров может привести к OOM.

systemd unit для постоянного слушателя (пример)

Файл /etc/systemd/system/soffice-listener.service (пример шаблона):

[Unit]
Description=LibreOffice listener for unoconv
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/soffice --headless --nologo --nodefault --accept="socket,host=127.0.0.1,port=2002;urp;" --nofirststartwizard
Restart=on-failure

[Install]
WantedBy=multi-user.target

После создания: sudo systemctl daemon-reload && sudo systemctl enable --now soffice-listener.service.

Тесты и критерии приёмки

Критерии приёмки для пакетной задачи конвертации:

  • Все файлы исходной папки конвертируются без ошибок (логируемые ошибки = 0).
  • Размер итоговой папки и число файлов соответствуют ожидаемому (один вход → один выход, кроме исключённых типов).
  • Визуальная проверка тестовой выборки (10–20 документов) на отсутствие критических искажений верстки, таблиц и изображений.
  • Обработка завершается за допустимое время (SLA зависит от объёма) и не приводит к превышению памяти на сервере.

Роли и чек-листы

Для администратора:

  • Установить unoconv и LibreOffice.
  • Запустить и поддерживать systemd-сервис слушателя при необходимости.
  • Обновлять пакеты безопасности.

Для продакшн-разработчика:

  • Автоматизировать скрипты конвертации.
  • Добавить логирование и ретраи.
  • Настроить мониторинг использования памяти и CPU.

Для контент-менеджера:

  • Подготовить шаблоны для -t.
  • Провести контроль качества после конверсии.

Трудности и когда unoconv не подойдёт

  • Если документы содержат макросы, сложные встроенные объекты или защищённую структуру — результат может быть некорректен.
  • В высокопроизводительных конвейерах, где нужен малый RPS и предсказуемое время ответа, лучше рассмотреть нативные API или специализированные сервиса.
  • Если требуется конвертация с сохранением 1:1 визуального соответствия на уровне точно воспроизводимых шрифтов и версий Office, возможно, придётся использовать коммерческие инструменты.

Резюме

unoconv — простой и мощный инструмент для массовой конвертации документов, который использует возможности LibreOffice. Для рабочих процессов с большим количеством файлов рекомендуются режим слушателя (headless + accept) или запуск LibreOffice как системного сервиса. Альтернативы (soffice –convert-to, pandoc, коммерческие решения) существуют и могут подойти в зависимости от требований к точности, производительности и поддержке сложной верстки.

Важно: всегда протестируйте на репрезентативной выборке документов перед запуском на всей базе.

Image credit: Paperwork Pile by BigStockPhoto

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Троян Herodotus: как он работает и как защититься
Кибербезопасность

Троян Herodotus: как он работает и как защититься

Включить новое меню «Пуск» в Windows 11
Windows руководство

Включить новое меню «Пуск» в Windows 11

Панель полей сводной таблицы в Excel — руководство
Excel

Панель полей сводной таблицы в Excel — руководство

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

История просмотров Reels в Instagram — как найти
Instagram

История просмотров Reels в Instagram — как найти