Массовая конверсия документов с 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_folderPandoc: хорош для конверсии между текстовыми форматами (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
Похожие материалы
Троян Herodotus: как он работает и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей сводной таблицы в Excel — руководство
Включить новое меню «Пуск» в Windows 11
Дубликаты Диспетчера задач в Windows 11 — как исправить